Frage

Ich mag so schnell einen Befehl auszuführen, wie ein bestimmte Text in einer Protokolldatei angezeigt wird. Wie kann ich tun, dass in Bash?

War es hilfreich?

Lösung

Verwenden Befehl

tail -f file.log | grep --line-buffered "my pattern" | while read line
do
  echo $line
done

Die --line-buffered ist hier der Schlüssel, da sonst die Lese fehl.

Andere Tipps

Mit nur tail:

tail -f file.log | while read line; do if [[ $line == *text* ]]; then
    mycommand
fi; done

Dies sollte auch ohne GNU grep funktionieren:

tail -f -n 0 logfile.out | nawk '/pattern/ {system("echo do something here")}'

edit: Added "-n 0", so dass nur neue Vorkommen des Textes angepasst werden

.

Auch könnten Sie bei inotail suchen, ein Ersatz für tail -f, die den inotify Framework verwendet nur aufwachen, wenn die Datei, die Sie in sich geändert hat interessiert sind. Der üblicher tail -f schläft nur für kurze Zeiträume zwischen der Abfrage, die eine effektive, aber nicht sehr effiziente Lösung ist.

Ich mag Matli Antwort. Bruno De Fraine Antwort ist auch gut, dass es verwendet nur Shell ccommands, nicht andere Programme (wie awk). Es leidet unter dem Problem, dass die gesamte Linie muss die magische Zeichenfolge übereinstimmen. Es ist nicht klar von der Frage, den Teil des requirment ist.

Ich würde ihm ein klein wenig ändern mit dem „sobald“ -Klausel in der ursprünglichen Frage zu tun

logfile_generator | tee logfile.out | nawk '/pattern/ {system("echo do something here")}'

wo logfile_generator ist das Programm, das die Protokolldatei in erster Linie erzeugt. Diese Modifikation führt die „etwas“, sobald der magische String befindet.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top