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

0

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

Mas, eu 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?

    
por Daniel Gur 28.10.2016 / 12:49

3 respostas

1

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

Você pode tentar o seguinte comando:

grep -R -f filename.txt /home/* pesquisará qualquer padrão dentro do seu arquivo filename.txt e fará a correspondência recursivamente contra todos os arquivos dentro da sua pasta pessoal. Você terá uma saída assim:

#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 produzirá o nome do arquivo e a linha completa contendo o seu padrão.

Se você quiser apenas exibir 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
    
por 28.10.2016 / 13:05
0

Isso deve funcionar para sua situação:

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

Então, para pesquisar a palavra 'test' em todos os arquivos terminados com .txt, use algo como:

grep -HRnF 'test' . --include "*.txt"
    
por 28.10.2016 / 13:21
0

O GNU grep tem a opção -o :

-o, --only-matching

Print only the matched (non-empty) parts of a matching line, with each such part on a separate output line.

Então, isso deve fazer o que você quer

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

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

    
por 28.10.2016 / 13:06

Tags