grep com tubulação e mostrando várias linhas

0

Estou tentando usar grep para pesquisar um arquivo de texto grande e retornar o parágrafo que contém algumas palavras-chave. Eu também quero retornar as linhas ao redor no resultado. Então, por exemplo, eu tenho as seguintes palavras que vou procurar: azul, verde, amarelo. Se eu quisesse encontrar o parágrafo contendo todas as 3 palavras, no arquivo chamado 'colors.txt', eu tentei o seguinte código:

grep blue colors.txt | grep green | grep yellow

Isso só me deu as listagens de amarelo, e não as que tinham amarelo, verde e azul, no parágrafo.

Eu queria então exibir as palavras ao redor, então usei algo como

grep -B 5 blue colors.txt | grep green colors.txt etc etc

Em resumo - tenho um arquivo de texto grande e quero encontrar a seção que contém as três cores, mas exiba as linhas ao redor dele.

    
por sdawes 01.05.2016 / 00:20

1 resposta

1

perl -00 -n -e 'print if (m/blue/i && m/green/i && m/yellow/i)' filename

Isso usa o modo de leitura de parágrafos de perl ( -00 ) para imprimir somente parágrafos contendo todas as três palavras (com correspondências que não diferenciam maiúsculas de minúsculas).

um 'parágrafo' é uma ou mais linhas de texto, separadas de outros parágrafos por pelo menos uma linha em branco.

por exemplo. Salvei o texto da sua pergunta em um arquivo e executei este perl one-liner nele. A saída é:

i am trying to use grep to search a large text file, and return the
paragraph containing a few key words. I also want to return the
surrounding lines in the result. So, for example I have the following
words I am going to search for: blue, green, yellow. If I wanted to find
the paragraph containing all 3 words, in the file called 'colors.txt', I
tried the following code:

grep blue colors.txt | grep green | grep yellow

This only gave me the listings for yellow though, and not the ones that
had yellow, green and blue, in the paragraph.

i.e. apenas 3 parágrafos de saída, enquanto sua pergunta tinha 7 parágrafos.

    
por 01.05.2016 / 01:26