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.*termB
etermB.*termA
pesquisam cadeias que tenham ambos os termos em isso. -
A porcentagem combinada de PCRE
termA.*termB|termB.*termA
corresponde a todas as sequências contendo os dois termos. -
Por fim, a opção
-z
faz 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. -
sort
classifica a saída. -
uniq -d
exibe apenas linhas duplicadas (as linhas necessárias devem ser classificadas).