Ich übergebe eine Liste von Regex-Mustern grep
, um sie mit einer Syslog-Datei zu vergleichen. Sie stimmen normalerweise mit einer IP-Adresse und einem Protokolleintrag überein.
grep "1\.2\.3\.4.*Has exploded" syslog.log
Es ist nur eine Liste von Mustern wie der "1\.2\.3\.4.*Has exploded"
Teil, den ich übergebe, in einer Schleife, sodass ich zum Beispiel nicht "-v" übergeben kann.
Ich bin verwirrt, wenn ich versuche, das Gegenteil von oben zu tun. Eine NICHT übereinstimmende Zeile mit einer bestimmten IP-Adresse und einem bestimmten Fehler, sodass "! 1.2.3.4. * Ist explodiert" mit Syslog-Zeilen für alles andere als 1.2.3.4 übereinstimmt und mir mitteilt, dass sie explodiert ist . Ich muss in der Lage sein, eine IP anzugeben, die NICHT übereinstimmt.
Ich habe verschiedene ähnliche Beiträge auf StackOverflor gesehen, aber sie verwenden Regex-Muster, mit denen ich scheinbar nicht arbeiten kann grep
. Kann jemand grep
bitte ein funktionierendes Beispiel dafür geben ?
UPDATE: Dies geschieht in einem Skript wie diesem.
patterns[1]="1\.2\.3\.4.*Has exploded"
patterns[2]="5\.6\.7\.8.*Has died"
patterns[3]="\!9\.10\.11\.12.*Has exploded"
for i in {1..3}
do
grep "${patterns[$i]}" logfile.log
done
patterns[3]="\!9\.10\.11\.12.*Has exploded"
Änderungen an patterns[3]="(?<!9\.10\.11\.12).*Has exploded"
und grep "${patterns[$i]}" logfile.log
Änderungen an grep -P "${patterns[$i]}" logfile.log
PCRE setzen standardmäßig mehr Metazeichen voraus, sodass einige der Escapezeichen möglicherweise aus anderen übereinstimmenden Ausdrücken entfernt werden müssen.