Grep-Dateien mit regulären Ausdrücken

Grep-Dateien mit regulären Ausdrücken

Ich habe eine Datei mit einer Reihe von Protokollzeilen.

Ich möchte Dateien zurückgeben, die das Wort „fail“ enthalten, aber nicht das folgende Muster:

Failed any test here _fr in Pro-any text here

Wenn es also enthält: _fr in Pro-

Ignorieren Sie dann die Zeile, auch wenn sie das Wort „fail“ enthält.

Antwort1

Betrachten wir diese Testdatei:

$ cat >test.log
keep fail
omit fail  _fr in Pro-

So finden Sie alle Zeilen, die Ihren Kriterien entsprechen:

$ awk '/[fF]ail/ && ! /_fr in Pro-/' test.log
keep fail

So drucken Sie nur die Namen der Dateien, deren Zeilen Ihren Kriterien entsprechen:

$ awk '/[fF]ail/ && ! /_fr in Pro-/ {print FILENAME; exit}' *.log
test.log

Wie es funktioniert:

Awk liest eine Datei implizit Zeile für Zeile durch. Die Bedingung /[fF]ail/ && ! /_fr in Pro-/trifft auf jede Zeile zu, die oder enthält Fail, failaber nicht enthält _fr in Pro-. In awk &&bedeutet logisch-und und !bedeutet logisch-nicht.

Ablehnung beider _fr in Pro-und_en in Pro-

Betrachten Sie diese Testdatei:

$ cat test.log
keep fail
omit fail  _fr in Pro-
omit fail  _en in Pro-

So lehnen Sie beide Formulare ab:

$ awk '/[fF]ail/ && ! /_(fr|en) in Pro-/' test.log
keep fail

verwandte Informationen