
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