Como faço para concatenar essas duas expressões regulares do grep

1

Eu tenho essas duas expressões regulares do grep

grep -e '[Yy].*[Yy].[Ee][Ee]' first.txt

e

grep -e '[Ee][Ee].*[Yy].*[Yy]' first.txt

Como faço para concatenar esses dois em uma única regex?

    
por Mel Rossi 28.04.2017 / 17:25

2 respostas

4

Ao concatenar os padrões?

grep -e '[Yy].*[Yy].[Ee][Ee][Ee][Ee].*[Yy].*[Yy]' first.txt

Ou você quis dizer essencialmente fazer um AND lógico dos dois padrões?

Se for o último, você precisará falsificá-lo, pois enquanto grep possui OR incorporado ( | ) e NOT ( -v ; [^] ), ele não possui um AND interno. Uma maneira é canalizar a saída de um grep para a outra:

grep -e '[Yy].*[Yy].[Ee][Ee]' first.txt | grep '[Ee][Ee].*[Yy].*[Yy]' 

A outra maneira é procurar os dois padrões em série, em qualquer ordem, com um OU lógico (abreviado para brevidade):

grep -Ee 'pattern1.*pattern2|pattern2.*pattern1' input.txt

Acho que o primeiro é mais sucinto e mais fácil de manter.

    
por 28.04.2017 / 17:32
1

Você pode grep para ambos os padrões de uma só vez usando \| entre cada padrão.

grep -e '[Yy].*[Yy].[Ee][Ee]'\|'[Ee][Ee].*[Yy].*[Yy]'
    
por 04.05.2017 / 20:29