Przygotowuję prezentację dla nietechnicznych odbiorców. Mam program działający w trybie bash, który generuje ciągły strumień wartości, z których kilka jest ważnych. Chciałbym podkreślić ważne wyniki podczas ich wyświetlania, aby publiczność mogła dowiedzieć się o ich częstotliwości. Problem polega na tym, że nie mogę sed
uruchomić działającego strumienia. Działa dobrze, jeśli umieszczę wyniki w pliku, jak w:
cat output.txt | sed "s/some text/some text bolded/"
Ale jeśli spróbuję tego samego na uruchomionym wyjściu, to tak:
command | sed "s/some text/some text bolded/"
sed
nic nie robi. jakieś pomysły?
Jak Lambert był na tyle pomocny, by to podkreślić, moje powiedzenie, że sed
nic nie robi, było niejasne. To, co się dzieje, polega na tym, że program wypisuje stdout
(jestem pewien, że nie pisze do stderr
), jak zwykle, nawet jeśli jest przesyłany strumieniowo sed
.
Problem polega na tym, że polecenie wywołuje drugi program, który następnie wyprowadza na standardowe wyjście. Pierwszy program drukuje kilka wierszy; te mogę edytować. Następnie jest strumień wartości drukowany przez drugi program; tych nie mogę edytować.
Metody Perl i awk również nie działają.
command|egrep 'some text|$'
g
„globalne” podstawienie, w przeciwnym razie zostanie zastąpione tylko pierwsze wystąpienie w wierszu:sed "s/old/new/g"
stdbuf -o0 command | sed "s/some text/some text bolded/"
działa