Ich möchte bestimmte Wörter aus den Ergebnissen ausschließen, wenn ich tail in grep weiterleite

Ich möchte bestimmte Wörter aus den Ergebnissen ausschließen, wenn ich tail in grep weiterleite

Ich verwende „tail -f /var/log/fail2ban.log -f /var/log/ufw.log | grep -e Ban -e BLOCK -e ALLOW“ (ohne Anführungszeichen) und es funktioniert, aber ich möchte die Ergebnisse ausschließen, die die Wörter UDP und ICMP enthalten. Wenn ich „tail -f /var/log/fail2ban.log -f /var/log/ufw.log | grep -e Ban -e BLOCK -e ALLOW -v UDP -v ICMP“ versuche, erhalte ich die Fehlermeldung „grep: UDP: Keine solche Datei oder kein solches Verzeichnis“. Es scheint, als ob die Verwendung von -v zum Ausschließen von Wörtern beim Pipen nicht funktioniert.

Bildbeschreibung hier eingeben

Antwort1

Sie können die erste Ausgabe einfach an ein anderes Grep weiterleiten und es als weiteren „Filter“ verwenden, wie:

tail -f /var/log/fail2ban.log -f /var/log/ufw.log | grep "Ban\|BLOCK\|ALLOW" | grep -v "UDP\|ICMP"

Beachten Sie, dass grep verschiedene Zeichenfolgen und sogar reguläre Ausdrücke stapeln kann, wenn Sie Anführungszeichen verwenden und diese durch ein Pipe-Zeichen „|“ trennen. Sie sollten das Zeichen jedoch mit „\“ abgrenzen, um seltsame Ergebnisse zu vermeiden.

Der Parameter -v bedeutet wörtlich in man

-v, --invert-match Kehrt den Übereinstimmungssinn um, um nicht übereinstimmende Zeilen auszuwählen.

Es scheint also, als würde die von Ihnen ermittelte Übereinstimmung einfach umgekehrt, sodass Sie sie nicht parametrisieren können.

Wie Sie in der Übersicht sehen, können Sie drei Arten von Parametern angeben: Optionen, ein Muster und eine Datei.

Optionen sind Ganzes, die immer mit - oder -- beginnen, und Sie können mehrere davon angeben.

Sie können ein einzelnes Muster oder einen bestimmten Mustertyp mit -e oder -f oder ohne irgendetwas bestimmen.

Und zuletzt sollten immer die Dateien oder das Verzeichnis stehen (Verzeichnisse benötigen den Parameter -R, um sie rekursiv zu durchsuchen, oder Sie können einfach „directory/*“ eingeben). Wenn nichts angegeben ist, wird versucht, die Standardeingabe wie von Ihnen zu lesen.

   SYNOPSIS
   grep [OPTION...] PATTERNS [FILE...]
   grep [OPTION...] -e PATTERNS ... [FILE...]
   grep [OPTION...] -f PATTERN_FILE ... [FILE...]

Das ist jedenfalls schonantworteteauf eine grundlegendere Weise

Antwort2

Ich habe hierfür einen Workaround, bei dem ich zwei SSH-Sitzungen verwende. Ich leite die Ergebnisse der ersten grep-Anweisung in eine Datei weiter und in der zweiten SSH-Sitzung leite ich die in grep weitergeleiteten Ergebnisse an. (1. SSH-Sitzung) – tail -f /var/log/fail2ban.log –f /var/log/ufw.log | grep –v ICMP >/home/user/staging (2. SSH-Sitzung) – tail –f /home/user/staging | grep –e ALLOW –e BLOCK, etwas unkonventionell, aber es funktioniert.

verwandte Informationen