
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 grep
possui OR ( |
) e NOT ( -v
; [^]
) integrados, ele não possui um AND integrado. Uma maneira é canalizar a saída de um grep
para 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]'