Sto mettendo insieme una presentazione per un pubblico non tecnico. Ho un programma in esecuzione in bash che genera un flusso continuo di valori, alcuni dei quali sono importanti. Vorrei evidenziare i risultati importanti quando vengono visualizzati in modo che il pubblico possa farsi un'idea della loro frequenza. Il problema è che non riesco sed
a operare su un flusso in esecuzione. Funziona bene se inserisco i risultati in un file, come in:
cat output.txt | sed "s/some text/some text bolded/"
Ma se provo la stessa cosa sull'output in esecuzione, in questo modo:
command | sed "s/some text/some text bolded/"
sed
non fa nulla. qualche idea?
Come Lambert è stato abbastanza utile da sottolineare, il mio dire che sed
non fa nulla era vago. Quello che sta succedendo è che il programma esce stdout
(sono quasi sicuro che non stia scrivendo stderr
) come farebbe normalmente, anche se è stato inviato sed
.
Il problema sembra essere che il comando chiama un secondo programma, che quindi viene emesso su stdout. Ci sono alcune righe stampate dal primo programma; questi che posso modificare. Quindi c'è un flusso di valori stampati dal secondo programma; questi non posso modificarli.
I metodi Perl e Awk non funzionano neanche.
command|egrep 'some text|$'
g
sostituzione "globale" ottenuta, altrimenti verrà sostituita solo la prima occorrenza su una riga:sed "s/old/new/g"
stdbuf -o0 command | sed "s/some text/some text bolded/"
?