Frage Filter / grep einige Ausgaben nur durch bestimmte Spalte?


Wie kann ich bestimmte Ausgaben nur nach bestimmten Spalten filtern?

Ich brauche so etwas:

tail -f logs/access_log | grep -v "200" --only-in-column=1

Ich möchte also nur Zeilen sehen, die in der ersten Spalte keine Zeichenfolge '200' haben.


4
2017-08-25 07:25


Ursprung




Antworten:


Awk ist wahrscheinlich das kanonische Werkzeug für diese Art von Problem.

$ cat data
foo 200 bar
foo 200 baz
bar 4   baz

$ cat data | awk '$2 != 200 { print $0 }'
bar 4   baz

13
2017-08-25 07:41



Übrigens können Sie die Aktion als schreiben { print } oder es sogar ganz weglassen (nur awk '$2 != 200'), schon seit print $0 ist die Standardaktion. - David Z
Danke, schön, etwas zu lernen, indem du auf die Frage eines anderen antwortest. - Nathan O'Sullivan


Das wird funktionieren:

tail -f logs/access_log | grep -v '^200[[:blank:]]'

Dies schließt Zeilen aus, die mit "200" beginnen, gefolgt von einem Leerzeichen oder einer Registerkarte.

Sie können je nach Ihren Anforderungen unterschiedliche Begrenzer-Sets auswählen.

tail -f logs/access_log | grep -v '^200[^[:alnum:]]'

Dies schließt Zeilen aus, die mit "200" beginnen, gefolgt von einem anderen Zeichen als alphabetischen oder numerischen Zeichen.


0
2017-08-30 01:35