Ich habe eine Reihe von Protokolldateien, die ich überprüfen muss, und möchte bestimmte Zeichenfolgen für dieselben Dateien gleichzeitig durchsuchen. Ist dies möglich? Derzeit verwende ich

grep -E "fatal|error|critical|failure|warning|" /path_to_file 

Wie verwende ich dies und suche nach den Zeichenfolgen mehrerer Dateien gleichzeitig? Wenn dies ein Skript sein muss, kann jemand ein einfaches Skript bereitstellen, um dies zu tun?

Antwort

grep -E "fatal|error|critical|failure|warning|" *.log 

Kommentare

  • Wie kann ich grep dazu bringen, Verzeichnisse zu überspringen, aber trotzdem alle rekursiv zu überprüfen Dateien? grep -E 'text' **/* funktioniert, gibt jedoch eine Fehlermeldung für jedes Unterverzeichnis aus (und überprüft dann alle darin enthaltenen Dateien korrekt)
  • @Jorn. Sie sollten wirklich eine neue Frage stellen. aber benutze find . -type f -exec grep -E 'fatal|error|critical|failure|warning' {} +
  • Ich bekomme grep: invalid max count, also habe ich jherrans answer

Antwort

Sie könnten Folgendes verwenden:

find . -name "*.log" | xargs grep -E "fatal|error|critical|failure|warning|" 

Dies wird Suchen Sie jede Datei mit der Erweiterung .log und wenden Sie den Befehl grep an.

Kommentare

  • Warum sich mit xargs und der Möglichkeit eines schweren Leerzeichenbruchs in Dateinamen beschäftigen, wenn Sie können einfach find . -name '*.log' -exec grep -E 'fatal|error|critical|failure|warning' {} + verwenden?

Antwort

Wenn ja ist einfacher, Sie können einfach jede Datei nacheinander angeben.

grep -E "fatal|error|critical|failure|warning" file1.log file2.log 

Antwort

Wenn Sie brauchen So suchen Sie nach einem beliebigen Satz von Dateinamen, die nicht mit einem regulären Ausdruck abgerufen werden können:

grep -E "fatal|error|critical|failure|warning|" `cat<<FIN > file1 > file2 > ... > filen > FIN` 

Was ist der Vorteil gegenüber dem Einfügen der Dateinamen nacheinander? Sie können die Dateinamenliste in eine Textdatei kompilieren und dann einfügen.

Antwort

Sie können auch geschweifte Klammern verwenden, wenn Die Dateien befinden sich alle im selben Ordner.

Siehe Beispiel

grep -E "fatal|error|critical|failure|warning|" /var/log/{messages,secure,syslog,dmesg} 

Wenn Sie dem grep ein s hinzufügen, werden Fehler beim Fehlen unterdrückt files

grep -sE "fatal|error|critical|failure|warning|" /var/log/{messages,secure,syslog,dmesg} 

Ich habe gerade selbst damit experimentiert, um Befehle auszuführen, die über mehrere Distributionen hinweg funktionieren, wobei sie sich aufgrund von Betriebssystemunterschieden in einer Datei gegenüber der anderen befinden.

E-Mail-Protokolle

sudo grep -is [email protected] /var/log/{maillog,exim_mainlog,exim_rejectlog,mail.log,mail.err,syslog} 

Archivierte E-Mail-Protokolle mit 2> / dev / null, um zgrep fehlende .gz-Warnungen zu unterdrücken

sudo zgrep -is [email protected] /var/log/{maillog*,exim_mainlog*,exim_rejectlog*,mail.log*,mail.err*,syslog*} 2>/dev/null 

Referenz: Gibt es eine Möglichkeit, auf mehrere Dateien in einem Verzeichnis zu verweisen, ohne den gesamten Pfad erneut einzugeben?

Antwort

Wenn Sie auch rekursiv in Unterverzeichnisdateien suchen möchten, können Sie den folgenden Befehl

verwenden Es wird rekursiv in Unterverzeichnisdateien gesucht s auch

egrep -r "string1|string2" pathname 

Kommentare

Antwort

Dies war eine sehr zeitaufwändige Aufgabe. Und ja, es musste unbedingt ein Skript erstellt werden, wenn Sie gleichzeitig nach mehreren Zeichenfolgen in mehreren verschiedenen Protokollen suchen möchten. Aber ich musste dies kürzlich tun und es war ziemlich schmerzhaft. Trotzdem ist es fertig und bereit und kann kann über den folgenden Link heruntergeladen werden:

Protokollsuch-Skript herunterladen

Die Funktionsweise ist ziemlich einfach.

Szenario 1: Überwachen Sie EINEN String in nur EINER Protokolldatei

./logsearch.sh localhost /var/tmp/logXray autonda /var/log/messages 60m "can.*t.*open" "." 1 2 single_errCheck -ndshow 

Szenario 2: Überwacht MEHRERE Zeichenfolgen in nur EINER Protokolldatei

./logsearch.sh localhost /var/tmp/logXray autonda /var/log/messages 60m "can.*t.*open_P_ntpd.*stat" "." 1 2 multi_errCheck -ndshow 

Szenario 3: Überwachen einzelner / mehrerer Zeichenfolgen in mehreren Protokolldateien

./logsearch.sh localhost /var/tmp/logXray autonda /var/log 60m "can.*t.*open_P_ntpd.*stat" "." 1 2 multi_err_multi_logCheck -ndshow 

Hinweise:

Das _P_ bedeutet ODER – Es ersetzt die Pipe „|“ ymbol, weil es weniger wahrscheinlich ist, dass Sie nach einer Zeichenfolge suchen müssen, die „_P_“ enthält. Wenn Sie nicht „_P_“ eingeben möchten, können Sie das _P_ einfach durch „|“ ersetzen.

Bei Verwendung dieses Skripts werden folgende Parameter häufig geändert:

  1. Die zu überwachende Protokolldatei oder das zu überwachende Protokollverzeichnis
  2. Das Alter Eine Protokolldatei muss vorhanden sein, damit sie überwacht werden kann. Sie dürfen keine Protokolldatei überwachen oder erkennen, deren Zeitstempel länger als 60 Minuten ist.
  3. Die Zeichenfolgen / Muster, auf die Sie achten möchten
  4. Das Tag – Dies ist das vorletzte Argument, das Sie angeben müssen. Es zeichnet Statistiken zu den Protokolldateien auf, die Sie unter / var / tmp / logXray
  5. überwachen Die Protokolloption -ndshow – Dies ist der Parameter, den Sie verwenden möchten, wenn Sie die Einträge aus den gefundenen Protokollen ausgeben möchten, die mit den von Ihnen angegebenen Mustern übereinstimmen.Wenn Sie nur die Gesamtzahl der gefundenen Muster anzeigen möchten, ersetzen Sie einfach „-ndshow“ durch „-ndfoundmul“.

Wenn Sie „-ndfoundmul“ verwenden, erhalten Sie eine Ausgabe ähnlich wie:

[root@dgphxtest001]# ./logsearch.sh localhost /var/tmp/logXray autonda /var/log/messages 60m "can.*t.*open_P_ntpd.*stat" "." 1 2 blahblahA -ndfoundmul OK: [/var/log/messages][1] /var/log/messages:P=(can_t_open=0 ntpd_stat=0)_F=(117s)_R=(228,228=0) 

Lösung für das Problem des Originalplakats: Nach mehreren Zeichenfolgen in mehreren Protokolldateien suchen

./logsearch.sh localhost /var/tmp/logXray autonda /var/log 60m "fatal_P_error_P_critical_P_failure_P_warning" "." 1 2 multierr_logCheck -ndshow 

Betriebssysteme: Dies wurde unter Ubuntu und Red Hat getestet.

Antwort

grep -EFn "fatal|error|critical|failure|warning|search-string" /path/to/the/file/log_file?.lo* --color=auto 

Hiermit wird nach „schwerwiegend oder fehlerhaft oder kritisch oder fehlgeschlagen oder Warnung oder Suchzeichenfolge“ in den Dateien gesucht, deren Name mit „log_file?“ beginnt und die Erweiterung „lo “ * im Pfad / path / to / the / file / und geben Sie der Suchzeichenfolge eine zufällige Farbe und drucken Sie die Zeilennummer, unter der sie gefunden wurde.

Kommentare

  • Sicher, dies ist eine funktionierende Antwort, aber der Benutzer hat nach einer Suche mit a gefragt Muster haben Sie mit einer festen Suchzeichenfolge geantwortet. Tut mir leid, aber das Hinzufügen von Dingen, nach denen nicht gefragt wurde, wie z. B. die Zeilennummerierung und Färbung der Ergebnisse, macht eine Antwort wahrscheinlich nicht vorteilhafter. Aber es wird noch andere Fragen geben, die wahrscheinlich beantwortet werden können. Ihre grep Fähigkeiten, also viel Glück für Ihre USE-Karriere!
  • @zagrimsan Punkt genommen, ich ' habe das -E ' schwerwiegender | Fehler | kritischer | Fehler | Warnung | ' param dazu.
  • Und hey, er hat speziell nach mehreren Dateien gefragt, nicht nach einem Suchmuster. Bitte lesen Sie die Frage noch einmal.
  • Zitat aus dem F: " Suche nach bestimmten Zeichenfolgen ", und die Frage zeigt das Suchmuster (das mehrere übereinstimmende Zeichenfolgen enthält), das er verwendet. Sie haben Recht, dass der Titel der Frage etwas von dem abweicht, was er wirklich verlangt. Übrigens können -E und -F ' nicht gleichzeitig verwendet werden widersprüchlich (Tippfehler?).

Antwort

JigarGandhi „s Antwort demonstriert die Verwendung des Sternchen-Platzhalters. Es gibt mehr davon und Sie können sie hier oder durch Ausführen von .

Eine davon, die ich nützlich fand, ist der Bereich, der mit [] übereinstimmt. Da das System, an dem ich arbeite, ein fortlaufend nummeriertes Protokoll erstellt Dateien, z. B. product.log.1 product.log.2 ... product.log.200 Es ist praktisch, mit einem einzigen Befehl nach 3 oder 4 aufeinanderfolgenden Dateien zu greifen, aber nicht nach mehr. Dieses

grep "whatever" product.log.[5-7]

sucht nach allen Dateien, die mit product.log enden. 5, 6 oder 7. Der Platzhalter muss nicht am Ende stehen, damit die Antwort von flickerfly auf

grep -E "fatal|error|critical|failure|warning" file[1,2].log

Beachten Sie auch, dass diese Platzhalter auch in anderen Befehlen verwendet werden können, beispielsweise in cp.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.