grep vários padrões e imprima os resultados com o padrão de correspondência

grep vários padrões e imprima os resultados com o padrão de correspondência

Estou procurando fazer grep em vários arquivos com vários valores. Por exemplo: grep -f filename.txt /home/* -R
(filename.txt contém vários valores)

Mas preciso saber qual arquivo continha qual valor.
Por exemplo: /home/blah.txt contém valor1, /home/aaa.txt contém valor2, etc.

alguma sugestão?

Responder1

Você pode fazer isso usando alguns dos sinalizadores fornecidos pelo grep.

Você pode tentar o seguinte comando:

grep -R -f filename.txt /home/*irá pesquisar qualquer padrão dentro do seu filename.txtarquivo e combiná-lo recursivamente com todos os arquivos dentro da sua pasta pessoal. Você obterá uma saída como esta:

#here my filename contains the entries bash and Bingo
$grep -R -f filename.txt /home/*
/home/user/.bash_history:vi .bashrc
/home/user/.bash_history:vi .bashrc
/home/user/.bash_history:awk -v RS=END_WORD '/Bingo1/ && /Bingo2/' test2.txt | grep -o 'Pokeman.*'

grepirá gerar o nome do arquivo e a linha completa contendo seu padrão.

Se você deseja exibir apenas o padrão encontrado, tente o seguinte comando:

#here the -o flag only displays the matched values, and -n adds the line number
$grep -R -o -n -f test /home/*
/home/user/.bash_history:128:bash
/home/user/.bash_history:156:bash
/home/user/.bash_history:193:Bingo

Responder2

Isso deve funcionar para sua situação:

grep -HRnF '<pattern>' . --include "<file_name>"

Portanto, para procurar a palavra 'teste' em todos os arquivos que terminam em .txt, use algo como:

grep -HRnF 'test' . --include "*.txt"

Responder3

GNU greptem opção -o:

-o, --apenas correspondência

Imprima apenas as partes correspondentes (não vazias) de uma linha correspondente, com cada parte em uma linha de saída separada.

Então isso deve fazer o que você quer

grep -f filename.txt -R -H -o /home/*

Observe que também adicionei -H(-with-filename) para imprimir sempre o nome do arquivo.

informação relacionada