
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 grep
eingebaute ODER ( |
) und NICHT ( -v
; [^]
) hat, aber kein eingebautes UND. Eine Möglichkeit besteht darin, die Ausgabe des einen grep
in 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]'