Verwendung der -P
Option (PCRE):
grep -P 'AB\+CD,(?:nonAB\+nonCD|nonAB\+CD)' file.txt
Ausgabe:
AB+CD,nonAB+nonCD AB+CD,nonAB+CD AB+CD,nonAB+nonCD,nonAB+CD
Ich möchte die Zeilen extrahieren, die der folgenden logischen Operation entsprechen:
"AB+CD" AND ("nonAB+nonCD" OR "nonAB+CD").
Was bedeutet, ich möchte Zeilen mit:
AB+CD,nonAB+nonCD AB+CD,nonAB+CD AB+CD,nonAB+nonCD,nonAB+CD
Das heißt, ich suche nach Zeilen mit "AB + CD" mit einer oder beiden von ("nonAB + nonCD" ODER "nonAB + CD").
Beachten Sie, dass das + Teil der Zeichenfolge ist. Ich möchte es als Zeichenfolge (Zeichen) und nicht als arithmetische Operation behandeln.
Was ich getan habe, ist Pipe zum Ausführen von AND. Und benutze \ | für das ODER. Mein Befehl lautet also:
grep ',AB+CD' test.txt | grep ',nonAB+nonCD\|,nonAB+CD'
Der erste |
ist für Pfeifen. Das zweite ist das logische ODER für grep gemäß dieser Referenz, das dieses Beispiel für das logische ODER mit grep ergibt:
grep 'pattern1\|pattern2' filename
Das Ergebnis, das mir in den Terminalfarben erscheint (findet) den zweiten Teil des Befehls. Der erste Teil (vor der Pfeife |
wird im farbigen Ergebnis nicht hervorgehoben. Meine Frage:
1) Ist mein Befehl korrekt?
2) Wie färben Sie die vollständigen Befehlsergebnisse ein?
Verwendung der -P
Option (PCRE):
grep -P 'AB\+CD,(?:nonAB\+nonCD|nonAB\+CD)' file.txt
Ausgabe:
AB+CD,nonAB+nonCD AB+CD,nonAB+CD AB+CD,nonAB+nonCD,nonAB+CD