Je prépare une présentation pour un public non technique. J'ai un programme fonctionnant en bash qui produit un flux continu de valeurs, dont certaines sont importantes. Je voudrais souligner les résultats importants tels qu'ils sont affichés afin que le public puisse se faire une idée de leur fréquence. Le problème est que je ne peux pas sed
opérer sur un flux en cours d'exécution. Cela fonctionne bien si je mets les résultats dans un fichier, comme dans:
cat output.txt | sed "s/some text/some text bolded/"
Mais si j'essaye la même chose sur la sortie en cours d'exécution, comme ceci:
command | sed "s/some text/some text bolded/"
sed
ne fait rien. Des pensées?
Comme Lambert a été assez utile pour le souligner, mon affirmation selon laquelle sed
cela ne fait rien était vague. Ce qui se passe, c'est que le programme génère stdout
(je suis sûr qu'il n'écrit pas stderr
) comme il le ferait normalement, même s'il est acheminé sed
.
Le problème semble être que la commande appelle un deuxième programme, qui sort ensuite vers stdout. Il y a quelques lignes imprimées par le premier programme; je peux les modifier. Ensuite, il y a un flux de valeurs imprimées par le deuxième programme; je ne peux pas les modifier.
Les méthodes Perl et awk ne fonctionnent pas non plus.
command|egrep 'some text|$'
g
substitution "globale", sinon seule la première occurrence sur une ligne sera remplacée:sed "s/old/new/g"
stdbuf -o0 command | sed "s/some text/some text bolded/"
marche?