sblaesing
Goto Top

Tail -f mit grep filtern und in eine Datei umlenken klappt nicht

Hallo zusammen,

ich muss jetzt einfach mal Fragen, ich denke ich habe irgendwo ein Denkfehler drin:

System: Raspberry Pi - Wheezy (Debian)

Ich will eine Datei über tail -f aktuell auslesen. Das ganze dann mit grep filtern und das Ergebnis vom grep in eine Datei speichern.
Der Befehl dazu:

tail -f /root/src/doc/aprx/log/aprx-rf.log | grep XYZ >> /var/www/aprs/stationen.txt 

Das klappt nicht.

tail -f /root/src/doc/aprx/log/aprx-rf.log | grep XYZ
bringt mir genau das gewünschte Ergebnis auf den Bildschirm. Ich hätte es nur gerne in einer Datei.

So geht es auch nicht:
tail -f /root/src/doc/aprx/log/aprx-rf.log | grep XYZ | tee /var/www/aprs/stationen.txt

Was mache ich falsch?! Es sieht so aus, als kann man das Ergebnis von grep weder weiterleiten nur via Pipe weiterreichen. Das kann doch nicht sein?

Besten Dank!

Grüße,
Sebastian

Content-Key: 218770

Url: https://administrator.de/contentid/218770

Printed on: April 19, 2024 at 21:04 o'clock

Member: colinardo
colinardo Oct 08, 2013 updated at 11:13:40 (UTC)
Goto Top
Hallo Sebastian,
tail mit dem Parameter -f wartet immer auf neu hinzukommende Zeilen in der Log-Datei, die Ausgabe erfolgt aber normalerweise erst bei Beendigung des Befehls, deshalb wartet der Prompt unendlich
Alternativ könntest du es regelmäßig z.B. alle 10 Sekunden in einer Schleife so machen:
while [ 1 ]; do cat /root/src/doc/aprx/log/aprx-rf.log | grep XYZ > /var/www/aprs/stationen.txt ; sleep 10; done;
etwas effizienter so (erstellt 'stationen.txt' nur bei Änderungen der Logdatei neu):
datemod=0;while [ 1 ]; do d=$(stat -c %Y /root/src/doc/aprx/log/aprx-rf.log); if [ $datemod \< $d ]; then cat /root/src/doc/aprx/log/aprx-rf.log | grep "XYZ" >/var/www/aprs/stationen.txt;datemod=$d;fi; sleep 10; done;
Grüße Uwe
Member: sblaesing
sblaesing Oct 09, 2013 at 11:01:19 (UTC)
Goto Top
Zitat von @colinardo:
Hallo Sebastian,
tail mit dem Parameter -f wartet immer auf neu hinzukommende Zeilen in der Log-Datei, die Ausgabe erfolgt aber
normalerweise erst bei Beendigung des Befehls, deshalb wartet der Prompt unendlich
Alternativ könntest du es regelmäßig z.B. alle 10 Sekunden in einer Schleife so machen:
> while [ 1 ]; do cat /root/src/doc/aprx/log/aprx-rf.log | grep XYZ > /var/www/aprs/stationen.txt ; sleep 10; done;
> 
etwas effizienter so (erstellt 'stationen.txt' nur bei Änderungen der Logdatei neu):
> datemod=0;while [ 1 ]; do d=$(stat -c %Y /root/src/doc/aprx/log/aprx-rf.log); if [ $datemod \< $d ]; then cat
> /root/src/doc/aprx/log/aprx-rf.log | grep "XYZ" >/var/www/aprs/stationen.txt;datemod=$d;fi; sleep 10; done;
> 
Grüße Uwe


Hallo Uwe,

danke für die Antwort.
Die Datei wird automatisch befüllt und da will ich dann abgreifen, also das neu hinzugekommene.

Ich habe es jetzt hinbekommen mit "grep --line-buffered" scheint bei Debian irgendwie benötigt zu werden. Bei meinem Fedora Rechner ging es auch ohne den Parameter ohne Probleme.

Vielen Dank und freundliche Grüße,
Sebastian Blaesing