Estou montando uma apresentação para um público não técnico. Eu tenho um programa em execução no bash que gera um fluxo contínuo de valores, alguns dos quais são importantes. Gostaria de destacar os resultados importantes à medida que são exibidos para que o público possa ter uma idéia de sua frequência. O problema é que não consigo sed
operar em um fluxo em execução. Funciona bem se eu colocar os resultados em um arquivo, como em:
cat output.txt | sed "s/some text/some text bolded/"
Mas se eu tentar a mesma coisa na saída em execução, assim:
command | sed "s/some text/some text bolded/"
sed
faz nada. Alguma ideia?
Como Lambert foi útil o suficiente para apontar, o fato de eu dizer que sed
não faz nada era vago. O que está acontecendo é que o programa gera stdout
(tenho certeza de que não está gravando stderr
) como faria normalmente, mesmo que seja canalizado sed
.
A questão parece ser que o comando chama um segundo programa, que emite para stdout. Existem algumas linhas impressas pelo primeiro programa; estes eu posso editar. Depois, há um fluxo de valores impresso pelo segundo programa; estes eu não posso editar.
Os métodos Perl e awk também não funcionam.
command|egrep 'some text|$'
g
substituição "global" obtida, caso contrário, somente a primeira ocorrência em uma linha será substituída:sed "s/old/new/g"
stdbuf -o0 command | sed "s/some text/some text bolded/"
?