Wie verkette ich diese beiden Grep-Regexes?

Wie verkette ich diese beiden Grep-Regexes?

Ich habe diese beiden Grep-Regexe

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

Und

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

Wie verbinde ich diese beiden zu einem einzigen regulären Ausdruck?

Antwort1

Indem man die Muster verkettet?

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

Oder meinten Sie im Wesentlichen eine logische UND-Verknüpfung der beiden Muster?

Wenn letzteres der Fall ist, müssen Sie es vortäuschen, da es zwar grepeingebaute ODER ( |) und NICHT ( -v; [^]) hat, aber kein eingebautes UND. Eine Möglichkeit besteht darin, die Ausgabe des einen grepin das andere umzuleiten:

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

Die andere Möglichkeit besteht darin, nach beiden Mustern nacheinander in beliebiger Reihenfolge mit einem logischen ODER (der Kürze halber abgekürzt) zu suchen:

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

Ich finde, dass die erste Variante prägnanter und leichter zu pflegen ist.

Antwort2

Sie können nach beiden Mustern gleichzeitig suchen, indem Sie „ \|zwischen den einzelnen Mustern“ verwenden.

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

verwandte Informationen