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

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

Eu tenho essas duas expressões regulares grep

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

e

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

Como concatenar esses dois em um único regex?

Responder1

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?

Neste último caso, você precisa fingir, pois while greppossui OR ( |) e NOT ( -v; [^]) integrados, ele não possui um AND integrado. Uma maneira é canalizar a saída de um greppara o outro:

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

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

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

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

Responder2

Você pode usar o grep para ambos os padrões ao mesmo tempo usando \|entre cada padrão.

grep -e '[Yy].*[Yy].[Ee][Ee]'\|'[Ee][Ee].*[Yy].*[Yy]'

informação relacionada