Se os seus arquivos não contiverem bytes nulos
Nesse caso, você pode usar grep sozinho:
grep -Plz "termA.*termB|termB.*termA" *
Como funciona:
-
As Expressões regulares compatíveis com Perl
termA.*termBetermB.*termApesquisam cadeias que tenham ambos os termos em isso. -
A porcentagem combinada de PCRE
termA.*termB|termB.*termAcorresponde a todas as sequências contendo os dois termos. -
Por fim, a opção
-zfaz com que as linhas de dados terminem em bytes nulos em vez de novas linhas.
A propósito, não há necessidade de usar -P . Se você preferir continuar usando expressões regulares básicas POSIX , a sintaxe será semelhante:
grep -lz "termA.*termB\|termB.*termA" *
Se seus arquivos contiverem bytes nulos
Nesse caso, você precisará de ferramentas auxiliares:
(grep -l termA * ; grep -l termB *) | sort | uniq -d
Como funciona:
-
grep -l termA * ; grep -l termB *exibe todos os arquivos que contêm um dos termos. Os arquivos que contêm os dois termos serão exibidos duas vezes. -
sortclassifica a saída. -
uniq -dexibe apenas linhas duplicadas (as linhas necessárias devem ser classificadas).