Serengeti
Anmeldungsdatum: 24. Februar 2008
Beiträge: 1927
|
Hallo zusammen Ich möchte gerne ein Programm das ich aus der Konsole starte Filtern. Das Programme läuft wohl lange und gibt unmengen daten aus. Ich möchte in der konsole aber nur die Einträge sehen welche einen bestimmten Text enthält.
Bei allen Konsolen befehlen die ich bisher gefunden habe muss ich erst alles in eine Datei schreiben und dann die Datei durchsuchen. Ich benötige aber keine Datei.
Es reicht die Ausgabe der Zeile im terminal, Luxus wäre noch die Ausgabe der Uhrzeit.
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17548
Wohnort: Berlin
|
Grep u. Date könnten Dir helfen:
| for n in {1..30}; do echo $(date +%H:%M:%S)" "$n; sleep 0.1; done | grep 7
|
Wenn die Uhrzeit nicht gerade _7:: oder :_7: ist - dann nimme eine andere Zahl zum Filtern. Grep filtert nur die Zeilen heraus, die dem Suchkriterium entsprechen. Statt
| foo > Datei
grep Suchwort Datei
|
kann man auch
ausführen - die Ausgabe kann man danach in eine Datei leiten:
kann man auch
| foo | grep Suchwort > Datei
|
. Eine kontinuierliche Ausgabe, die selbst kein Datum erzeugt, und deren Programm Du nicht derart anpassen kannst, bekommst Du aber nicht so leicht dazu, ein Datum einzustreuen.
|
Serengeti
(Themenstarter)
Anmeldungsdatum: 24. Februar 2008
Beiträge: 1927
|
foo | grep Suchwort Scheint nicht zu funktionieren. Wenn ich ein Programm so aufrufe dann füllt es dennoch den Desktop mit allen Logmeldungen.
|
noisefloor
Ehemaliger
Anmeldungsdatum: 6. Juni 2006
Beiträge: 28954
Wohnort: WW
|
Hallo, das ginge z.B. mit Python. Folgendes Skript:
| import sys
from datetime import datetime
while True:
line = sys.stdin.readline()
print('{}: {}'.format(datetime.now(), line))
|
gibt einfach das wieder, was es über stdin liest und stellt bei der Ausgabe noch Zeit und Datum voran. Wenn du das Skript als stdin_reader.py speicherst kannst du es z.B. so testen: tail -f /var/log/syslog | python3 stdin_listener.py Dann ein paar Sachen machen, die einen Log in syslog generierten (z.B. Bluetooth aus- und anschalten) und die siehst die Ausgabe. Das Python-Skript kannst du dann so erweitern, dass es line nach bestimmten Mustern durchsucht (z.B. per regexp) und darauf hin eine Ausgabe vornimmt. Gruß, noisefloor
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17548
Wohnort: Berlin
|
Serengeti schrieb: foo | grep Suchwort Scheint nicht zu funktionieren. Wenn ich ein Programm so aufrufe dann füllt es dennoch den Desktop mit allen Logmeldungen.
Wie heißt denn das Programm - ist das geheim? Neben der Standardausgabe wird auch die Fehlerausgabe auf den Schirm geschrieben - jetzt wäre die Frage ob Dein Programm das macht, und ob der Inhalt, den Du auffangen willst, auch im Fehlerstrom steht.
Dies würde das Suchwort aus dem Gesamtstrom filtern. | foo 2>/dev/null | grep Suchwort
|
würde den Fehlerstrom verwerfen und Dein Suchwort in der normalen Ausgabe suchen.
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12801
|
user unknown schrieb:
Dies würde das Suchwort aus dem Gesamtstrom filtern.
In der bash geht auch Das ist etwas weniger zu tippen. ☺
|
track
Anmeldungsdatum: 26. Juni 2008
Beiträge: 7174
Wohnort: Wolfen (S-A)
|
Serengeti schrieb: foo | grep Suchwort Scheint nicht zu funktionieren. Wenn ich ein Programm so aufrufe dann füllt es dennoch den Desktop mit allen Logmeldungen.
Das spräche dafür, dass die Meldungen womöglich auf dem Standard-Error-device ausgegeben werden. Das müsstest Du also ggf. vorher noch umleiten. Ein anderer Punkt, der hier noch nicht angesprochen worden ist, ist ggf. das Line-Buffering. Das würde bewirken, dass erst eine gewisse Anzahl Zeilen gesammelt wird, bevor die Ausgabe dann gesammelt auf den Schirm geschickt wird. Man kann es aber durch eine Option abschalten. LG, track
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12801
|
track schrieb:
Ein anderer Punkt, der hier noch nicht angesprochen worden ist, ist ggf. das Line-Buffering. Das würde bewirken, dass erst eine gewisse Anzahl Zeilen gesammelt wird, bevor die Ausgabe dann gesammelt auf den Schirm geschickt wird. Man kann es aber durch eine Option abschalten.
Ja, aber das beschriebene Phänomen ist ja gerade das umgekehrte, dass nämlich immer noch viel zu viele Ausgaben kommen. Ich denke, es ist eher das Stderr-Thema.
|
Serengeti
(Themenstarter)
Anmeldungsdatum: 24. Februar 2008
Beiträge: 1927
|
@user unknown bei dem Programm handelt es sich um tinc @rklm danke dir
War die Lösung. Wieder was gelernt danke @track für die Erläuterung. Ich wusste nicht, dass Stderr auch auf dem Bildschirm ausgegeben wird. Ich ging davon aus, dass aus der Konsole gestartete Programme diese Meldungen einfach auch noch auf den Bildschirm kopieren. und somit keine Umleitung notwendig wäre. @noisefloor Danke für die Mühe mit dem Skript. Das werde ich mir auf jeden fall nochmal anschauen.
|
noisefloor
Ehemaliger
Anmeldungsdatum: 6. Juni 2006
Beiträge: 28954
Wohnort: WW
|
Hallo, @serengeti: Das Python Skript liest im Moment ja auch "nur" stdin. Wenn zu zusätzlich auf stderr lesen ausgeben willst, dann müsstest du noch eine Zeile wie | line_err = sys.stderr.readline()
|
plus dem passenden print-Befehl dazu packen. Gruß, noisefloor
|
Serengeti
(Themenstarter)
Anmeldungsdatum: 24. Februar 2008
Beiträge: 1927
|
Danke noch für den wichtigen Zusatz.
|