So verwenden Sie eine negative Übereinstimmung mit grep in Linux (drucken Sie Zeilen, die nicht übereinstimmen)

So verwenden Sie eine negative Übereinstimmung mit grep in Linux (drucken Sie Zeilen, die nicht übereinstimmen)

grep ist ein Befehlszeilen-Suchdienstprogramm für Linux, das Zeilen in Dateien ausgibt, die einem Muster oder regulären Ausdruck entsprechen. Es ist auch nützlich, Übereinstimmungen umzukehren, um alle Zeilen in einer Datei herauszufiltern, die eine bestimmte Zeichenfolge enthalten.

Negative Übereinstimmung mit grep

Um eine negative Übereinstimmung in zu verwenden grep, müssen Sie den Befehl mit den -v Flags oder ausgeben. --invert-matchDadurch werden nur die Zeilen gedruckt, die nicht mit dem angegebenen Muster übereinstimmen.

grep -v "bar"file

Beachten Sie jedoch, dass grep es keine Möglichkeit gibt, -o das Flag zu verwenden, um „nur Übereinstimmungen“ auszugeben, da nichts übereinstimmt, da technisch gesehen nichts übereinstimmt. grep kann in einer Zeichenfolge mehrfach übereinstimmen, aber in diesem Fall spielt es keine Rolle, ob es mehrere Übereinstimmungen gibt. Jede einzelne Übereinstimmung führt grep zu einem Zeilensprung.

Dies funktioniert auch mit regulären Ausdrücken (Regex) und gibt jeden String aus, der mit dem Regex übereinstimmt.

grep -v "foo ba[rz]"file

Während Sie reguläre Ausdrücke schreiben können, die eine negative Übereinstimmung liefern, ist es normalerweise einfacher, die Übereinstimmung auf diese Weise umzukehren.

Alternativ können Sie, wenn Sie lieber verwenden awk, den Ausrufe-Modifizierer verwenden, um den regulären Ausdruck umzukehren.

awk '!/bar/' file

Negativ übereinstimmende Dateinamen

Das Kleinbuchstaben-Flag -l bewirkt , dass grep Dateinamen, die Übereinstimmungen enthalten, anstelle des tatsächlichen übereinstimmenden Inhalts gedruckt werden. Dies kann nützlich sein, wenn Sie eine Liste von Dateien scannen, aber manchmal ist es auch nützlich, sie umzukehren.

Reverse -l ist eine Großbuchstabenvariante -L, die das Gegenteil bewirkt:

grep -L "bar". /*.txt

-v Stellen Sie sicher, dass Sie das c-Flag nicht verwenden -L, um die Übereinstimmung umzukehren, bevor Sie Dateien ohne Übereinstimmung drucken, oder Sie werden auf eine Situation mit „doppelten Gegensätzen“ stoßen, in der die Übereinstimmung zweimal invertiert wird und nicht den gewünschten Effekt hat.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert