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.