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.txt
arquivo 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.*'
grep
irá 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 grep
tem 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.