Ich stelle eine Präsentation für ein nicht-technisches Publikum zusammen. Ich habe ein Programm, das in Bash ausgeführt wird und einen kontinuierlichen Strom von Werten ausgibt, von denen einige wichtig sind. Ich möchte die wichtigen Ergebnisse hervorheben, die angezeigt werden, damit sich das Publikum einen Eindruck von ihrer Häufigkeit verschaffen kann. Das Problem ist, dass ich nicht sed
in der Lage bin, mit einem laufenden Stream zu arbeiten. Es funktioniert gut, wenn ich die Ergebnisse in eine Datei lege, wie in:
cat output.txt | sed "s/some text/some text bolded/"
Aber wenn ich das Gleiche auf der laufenden Ausgabe versuche, wie folgt:
command | sed "s/some text/some text bolded/"
sed
tut nichts. Irgendwelche Gedanken?
Wie Lambert hilfreich genug war, um darauf hinzuweisen, war mein Sprichwort, sed
das nichts bewirkt, vage. Was passiert ist, dass das Programm wie gewohnt auf ausgibt stdout
(ich bin mir ziemlich sicher, dass es nicht schreibt stderr
), auch wenn es durchgeleitet wird sed
.
Das Problem scheint zu sein, dass der Befehl ein zweites Programm aufruft, das dann auf stdout ausgegeben wird. Das erste Programm druckt einige Zeilen. diese kann ich bearbeiten. Dann gibt es einen Strom von Werten, die vom zweiten Programm gedruckt werden. diese kann ich nicht bearbeiten.
Perl- und awk-Methoden funktionieren auch nicht.
command|egrep 'some text|$'
g
"globale" Ersetzung hinzufügen , da sonst nur das erste Vorkommen in einer Zeile ersetzt wird:sed "s/old/new/g"
stdbuf -o0 command | sed "s/some text/some text bolded/"
Arbeit?