Como executar vários comandos AND no grep [duplicate]

0

Estou tentando executar o comando multiple AND combination no grep e consegui executar usando dois padrões:

grep -E 'pattern1.*pattern2' filename

É possível usar três ou quatro padrões usando o método acima?

    
por Tom 07.04.2015 / 16:55

2 respostas

3

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.

    
por 07.04.2015 / 17:07
0

Sim. Você pode construir qualquer expressão regular desejada e usá-la como padrão em um comando grep . Simplesmente tem que ser uma expressão regular legal.

    
por 07.04.2015 / 16:57

Tags