879 Stimmen

Wie kann man einen kontinuierlichen Datenstrom "greppen"?

Ist das möglich, wenn man grep in einem kontinuierlichen Strom?

Was ich meine, ist eine Art tail -f <file> Befehl, sondern mit grep auf die Ausgabe, um nur die Zeilen zu behalten, die mich interessieren.

Ich habe versucht tail -f <file> | grep pattern aber es scheint, dass grep kann nur einmal ausgeführt werden tail beendet, das heißt, niemals.

2voto

user10584393 Punkte 11

Dieser eine Befehl funktioniert bei mir (Suse):

mail-srv:/var/log # tail -f /var/log/mail.info |grep --line-buffered LOGIN  >> logins_to_mail

Sammeln von Anmeldungen beim Postdienst

-2voto

user882786 Punkte 37

Werden Sie mit Sicherheit keinen Erfolg haben

tail -f /var/log/foo.log |grep --line-buffered string2search

wenn Sie "colortail" als Alias für tail verwenden, z. B. in der Bash

alias tail='colortail -n 30'

können Sie überprüfen durch Typ-Alias überprüfen, ob dieser etwas ausgibt wie tail ist ein Alias von colortail -n 30 . dann haben Sie den Übeltäter :)

Lösung:

entfernen Sie den Alias mit

unalias tail

stellen Sie mit diesem Befehl sicher, dass Sie das 'echte' Tail-Binary verwenden

type tail

die etwas wie ausgeben sollte:

tail is /usr/bin/tail

und dann können Sie Ihren Befehl ausführen

tail -f foo.log |grep --line-buffered something

Viel Glück!

-4voto

Atif Punkte 29

Verwenden Sie awk (ein weiteres großartiges Bash-Dienstprogramm) anstelle von grep, wenn Sie nicht die Option der Zeilenpufferung haben! Es wird kontinuierlich Ihre Daten von tail streamen.

So verwenden Sie grep

tail -f <file> | grep pattern

So würden Sie awk verwenden

tail -f <file> | awk '/pattern/{print $0}'

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X