Estoy preparando una presentación para una audiencia no técnica. Tengo un programa que se ejecuta en bash que genera un flujo continuo de valores, algunos de los cuales son importantes. Me gustaría resaltar los resultados importantes a medida que se muestran para que el público pueda tener una idea de su frecuencia. El problema es que no puedo sed
operar en una secuencia en ejecución. Funciona bien si pongo los resultados en un archivo, como en:
cat output.txt | sed "s/some text/some text bolded/"
Pero si intento lo mismo en la salida en ejecución, así:
command | sed "s/some text/some text bolded/"
sed
no hace nada. ¿Alguna idea?
Como Lambert fue lo suficientemente útil como para señalar, mi dicho de que sed
no hace nada fue vago. Lo que está sucediendo es que el programa sale stdout
(estoy bastante seguro de que no está escribiendo stderr
) como lo haría normalmente, incluso si se canaliza sed
.
El problema parece ser que el comando llama a un segundo programa, que luego sale a stdout. Hay algunas líneas impresas por el primer programa; Estos puedo editar. Luego hay una corriente de valores impresos por el segundo programa; estos no puedo editarlos.
Los métodos Perl y awk tampoco funcionan.
command|egrep 'some text|$'
g
sustitución "global" obtenida, de lo contrario solo se sustituirá la primera aparición en una línea:sed "s/old/new/g"
stdbuf -o0 command | sed "s/some text/some text bolded/"
?