Ich habe mich gefragt, ob es eine beste Möglichkeit gibt, den folgenden Befehl auszuführen:
cat cisco.log-20151103.log | grep -v "90.192.142.138" | grep -v "PIX" | grep -v "Intrusion"
Ich habe versucht,
cat cisco.log-20151103.log | grep -v "90.192.142.138|PIX|Intrusion"
, aber es funktioniert nicht.
Antwort
zwei weitere Optionen
grep -v -e 90.192.142.138 -e PIX -e Intrusion cisco.log-20151103.log
und Annahme fester Zeichenfolgen
grep -vF "90.192.142.138 PIX Intrusion " cisco.log-20151103.log
Antwort
grep benötigt nicht unbedingt eine Eingabe von einer Pipe, daher können Sie
grep -vE "90\.192\.142\.138|PIX|Intrusion" cisco.log-20151103.log
Großbuchstabe E schaltet den Modus für reguläre Ausdrücke ein und in diesem Fall müssen Punkte maskiert werden.
Kommentare
- Das sollte sein
-E
aktiviert den erweiterten regulären Ausdrucksmodus, der den Wechsel|
von Mustern ermöglicht.grep
ohne -E hat reguläre Ausdrücke und Punkte sind aussagekräftig. Die Punkte sollten im Questio maskiert worden sein n, aber es ist ' unwahrscheinlich, dass die Zahlenfolge sowieso mit irgendetwas anderem übereinstimmt.grep -f
deaktiviert reguläre Ausdrücke. - Die Punkte sollten auf jeden Fall maskiert werden. Das angegebene Beispiel (in OP und Antwort) würde mit
190.192.142.138
übereinstimmen. Idealerweise sollte das IP-Adressstück nach Möglichkeit verankert sein oder ein beliebiges Trennzeichen vor der IP-Adresse in das Protokoll aufnehmen, wobei ein Komma ", " um die Dinge klar zu machen:grep -vE ',90\.192\.142\.138,|PIX|Intrusion' cisco.log-20151103.log
Antwort
grep -vE "90.192.142.138|PIX|Intrusion" cisco.log-20151103.log
Kommentare
- Seit dem
.
passt zu jedem Zeichen, das auch z90C192X142R138
und das hat das OP nicht gefragt. Sie sollten Sonderzeichen (Regex) maskieren.
Antwort
$ grep -v -f exclude.list $ cat exclude.list 90.192.142.138 PIX Intrusion
Kommentare
- Das funktioniert einwandfrei. ' Ich bin mir nicht sicher, warum jemand es abgelehnt hat.