Logisches UND und ODER mit grep

380
user9371654

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?

0
Die Escape-Sequenzen zum Einfärben der Ausgabe werden nur auf der Terminalausgabe generiert: Wenn sie in eine Pipe übergeben werden, können sie eine nachfolgende Übereinstimmung stören. Sie müssten also das ganze Spiel mit einem einzigen "grep" -Aufruf machen. Dies sollte mit `grep -E` (oder` egrep`) möglich sein, und ich werde mir eine mögliche Übereinstimmungszeichenfolge ansehen. In Ihren Beispielen steht "AB + CD" vor "nonAB": Ist dies immer der Fall? Ihre Doppelsuche stimmt überein, auch wenn 'AB + CD' später erscheint. AFH vor 5 Jahren 0
Keine bestimmte Reihenfolge in meinem Fall. Nur "AB + CD" ist ein Muss. Dann müssen die anderen `, nonAB + nonCD` oder`, nonAB + CD`, von denen mindestens eine übereinstimmen muss. user9371654 vor 5 Jahren 0
Einige anfängliche Tests zeigen, dass die Übereinstimmung die Form "Muster1. * Muster2" annehmen muss, was bedeutet, dass alle Zwischenzeichen zwischen den beiden Mustern Teil der Übereinstimmung sind und daher farbig sind. Wird das zufriedenstellend sein? AFH vor 5 Jahren 0

1 Antwort auf die Frage

0
Toto

Verwendung der -POption (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