Haben Sie einen Egrep-Alias für alles, was den Text modifizieren könnte, wie es grep --color
vielleicht der Fall ist ?$ type egrep
Überprüfen Sie auch die Ausgabe auf "ausgeblendete" Steuerzeichen mit od -bc
(wie in jch erwähnt) oder hd -C
.
Ich versuche die Ausgabe von ngrep zu grep. Wenn ich der Pipeline ein weiteres grep hinzufüge, bekomme ich leider keine Ausgabe. Es kann auch ein anderer Befehl sein - cat / grep / tee - alles bricht die Kette. Beispiel:
# this works: $ ngrep -l -q -T -Wbyline -d any udp and port 5060 | egrep -B1 '^SIP/2.0 180' -- U +1.469535 xxx:5060 -> xxx:5060 SIP/2.0 180 Ringing. -- U +0.001384 xxx:5060 -> xxx:2048 SIP/2.0 180 Ringing.
aber
#these don't: $ ngrep -l -q -T -Wbyline -d any udp and port 5060 | egrep -B1 '^SIP/2.0 180' | egrep '^U' $ ngrep -l -q -T -Wbyline -d any udp and port 5060 | egrep -B1 '^SIP/2.0 180' | cat $ ngrep -l -q -T -Wbyline -d any udp and port 5060 | egrep -B1 '^SIP/2.0 180' | tee test
Wenn ich cat somefile
am Anfang ngrep verwende, funktioniert alles wie erwartet. Irgendwelche Ideen, was hier schief gehen könnte?
Haben Sie einen Egrep-Alias für alles, was den Text modifizieren könnte, wie es grep --color
vielleicht der Fall ist ?$ type egrep
Überprüfen Sie auch die Ausgabe auf "ausgeblendete" Steuerzeichen mit od -bc
(wie in jch erwähnt) oder hd -C
.
EDIT: Ich habe mich selbst mit "egrep" getroffen - tat:
tail -f somefile|egrep 'somepattern'
Das würde alle zwei Sekunden ein erfreuliches Ergebnis liefern. aber folgendes erzeugte nichts :
tail -f somefile|egrep 'somepattern'|tr -d '%'
Nach einigem Graben in der Manpage fand ich die Option '--line-buffered', die wieder zu Ausgabe führte!
Dann fand ich diese Beschreibung der Pufferung in Pipelines - es scheint so, als würde es darauf hinauslaufen, dass einige Kommandozeilen-Utils (zB: tail -f) fflush auf stdout routinemäßig aufrufen und andere (cut, grep usw.) nicht.
Meine falsche erste Antwort ist unten
Normalerweise, wenn ich auf diese Arten von Problemen stoße, geben eines oder mehrere der Programme in der Pipeline Ausgaben für mehrere Dateideskriptoren aus - meistens STDERR.
Sie könnten versuchen, '2> & 1' vor dem ersten '|' hinzuzufügen. in der Pipeline, um STDERR zu STDOUT umzuleiten.