Se a ordem dos padrões for corrigida, você poderá usar facilmente grep
como em:
grep -E 'pattern1.*pattern2.*pattern3'
Mas, no caso de todos os padrões estarem presentes e aparecerem em qualquer ordem, você terá uma complexidade combinatória; por exemplo. por dois padrões:
grep -E '(pattern1.*pattern2|pattern2.*pattern1)'
(e para três padrões você já teria oito combinações).
Nesses casos (ou seja, ao usar grep
), é melhor fazer cascata das chamadas em um pipeline de uma grep
instance por padrão:
grep pattern1 <infile | grep pattern2 | grep pattern3
Cada instância filtrará apenas as linhas que correspondem a seu padrão, e o resultado geral conterá apenas as linhas que possuem todos os padrões.
Uma abordagem melhor que leva à solução mais clara é usar awk
:
awk '/pattern1/ && /pattern2/ && /pattern3/'
onde a ordem não importaria em tal expressão.