Wie kann ich bei einer großen Protokolldatei diese Zeilen ohne "Erfolg" anzeigen oder nicht mit "OK" beenden?
Wie kann ich bei einer großen Protokolldatei diese Zeilen ohne "Erfolg" anzeigen oder nicht mit "OK" beenden?
Antworten:
So entfernen Sie Zeilen, die eine der beiden Zeichenfolgen enthalten , insbesondere mit grep:
In einem Befehl laut Jordanms Kommentar:
grep -Ev 'success|ok$'
oder:
grep -ve success -e 'ok$'
oder:
grep -v 'success
ok$'
In zwei Befehlen:
grep -v success file | grep -v 'ok$'
Beispiel:
$ cat file
success something else
success ok
just something else
$ grep -Ev 'success|ok$'
just something else
$ grep -v success file | grep -v 'ok$'
just something else
So entfernen Sie Zeilen, die beide Zeichenfolgen enthalten , insbesondere mit grep:
grep -v 'success.*ok$' file
Beispiel:
$ cat file
success something else
success ok
just something else
$ grep -v 'success.*ok$' file
success something else
just something else
Ich würde awk versuchen
awk '/success/ { next ; } /ok$/ { next ; } { print ;}' file
wo
/success/ { next ; }Wort finden successund Zeile überspringen/ok$/ { next ; }Kleinbuchstaben finden okund Zeile überspringen{ print ;} implizit sonst: Zeile druckengemäß Vorschlag
kurz awk (danke an Stéphane Chazelas)
awk '!/success/ && !/ok$/'
Das ist im Grunde nicht (Erfolg) und nicht (ok am Ende der Zeile)
Golf awk (danke an cas)
awk '! /success|ok$/'
die regexp wiederverwenden und negieren
awk '!/success/ && !/ok$/'wäre kanonischer.
awk '! /success|ok$/'
Hinzufügen zu den obigen grep -Ev-Befehlen: Sie können verwenden egrep -v 'success|ok$' filename
egrepwird zugunsten vongrep -E
Da awk erwähnt wurde, wäre eine andere Alternative sed:
sed '/success/d;/ok$/d' file
sed -e '/success/d' -e '/ok$/d' file
oder (neuere sed und zukünftige POSIX) dank Stéphane Chazelas
sed -E '/success|ok$/d' file
sed -rzu sed -E, dann das funktionieren wird in einiger BSD sedzusätzlich zu (nicht zu alten Versionen von) GNU sed. sed -Ewird in der nächsten Hauptausgabe der POSIX-Spezifikation erscheinen.
grep -Ev '(success|ok$)'