Я составляю презентацию для нетехнической аудитории. У меня есть программа, работающая на Bash, которая выводит непрерывный поток значений, некоторые из которых важны. Я хотел бы выделить важные результаты, поскольку они отображаются, чтобы аудитория могла понять их частоту. Проблема в том, что я не могу sed
работать на работающем потоке. Это работает нормально, если я положил результаты в файл, как в:
cat output.txt | sed "s/some text/some text bolded/"
Но если я попробую то же самое на работающем выводе, вот так:
command | sed "s/some text/some text bolded/"
sed
ничего не делает. Есть предположения?
Поскольку Ламберт был достаточно полезен, чтобы указать, мое высказывание, которое sed
ничего не делает, было расплывчатым. Происходит то, что программа выводит stdout
(я почти уверен, что она не пишет stderr
), как обычно, даже если она по каналу sed
.
Кажется, проблема в том, что команда вызывает вторую программу, которая затем выводит на стандартный вывод. Есть несколько строк, напечатанных первой программой; это я могу редактировать. Затем идет поток значений, напечатанный второй программой; это я не могу редактировать.
Методы Perl и awk тоже не работают.
command|egrep 'some text|$'
g
полученную «глобальную» подстановку, в противном случае будет подставлено только первое вхождение в строке:sed "s/old/new/g"
stdbuf -o0 command | sed "s/some text/some text bolded/"
?