Como pesquisar arquivos onde existem duas palavras diferentes?
tem muitas boas soluções para o seu problema básico.
Para lidar com seu requisito adicional de mostrar o contexto,
Precisamos apenas de uma dessas respostas (por exemplo, Stéphane’s )
e adicione um pouco a isso:
find . -type f -exec grep -q word1 {} ';' -exec grep -q word2 {} ';' \
-exec grep -A3 -B3 -E -H 'word1|word2' {} +
A parte find . -type f -exec grep -q word1 {} ';' -exec grep -q word2 {} ';'
é apenas a segunda resposta de Stéphane (a portátil, mas simples)
com a opção -l
para o segundo grep
(para listar nomes de arquivos)
substituído por -q
(para pesquisar e sair silenciosamente com status).
Em seguida, adicionamos um grep
final para exibir os resultados.
-A3
e -B3
mostram três linhas depois e três linhas antes de cada partida;
ajuste-os ao seu gosto.
O -E
é necessário para obter a expressão regular estendida word1|word2
para trabalhar sem \
;
o -H
força grep
a imprimir o nome do arquivo mesmo se houver apenas um arquivo.