Logisches UND und ODER mit grep

Logisches UND und ODER mit grep

Ich möchte die Zeilen extrahieren, die der folgenden logischen Operation entsprechen:

"AB+CD" AND ("nonAB+nonCD" OR "nonAB+CD"). 

Das heißt, 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" miteinsoderbeidevon ("nonAB+nonCD" ODER "nonAB+CD").
Beachten Sie, dass das + Teil der Zeichenfolge ist. Ich möchte es als Zeichenfolge (Zeichen) behandeln, nicht als arithmetische Operation.

Ich habe Pipe verwendet, um AND auszuführen. Und \| für OR. Mein Befehl lautet also:

grep ',AB+CD' test.txt | grep ',nonAB+nonCD\|,nonAB+CD'

Das erste |ist für das Piping. Das zweite ist das logische ODER für grep gemäß diesemReferenzdas ergibt dieses Beispiel für ein logisches ODER mit grep:

grep 'pattern1\|pattern2' filename

Das Ergebnis, das mir im Terminal angezeigt wird, färbt (findet) den zweiten Teil des Befehls. Der erste Teil (vor der Pipe) |wird im farbigen Ergebnis nicht hervorgehoben. Meine Frage:

1) Ist mein Befehl korrekt?

2) Wie färbe ich die vollständigen Befehlsergebnisse ein?

Antwort1

Option verwenden -P(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

verwandte Informationen