sedを使用して連続ストリーム出力を操作するには?

sedを使用して連続ストリーム出力を操作するには?

私は技術知識のない視聴者のためのプレゼンテーションを準備しています。連続した値ストリームを出力するbashで実行されるプログラムがあり、そのいくつかは重要です。視聴者がその頻度を理解できるように、表示された重要な結果を強調したいと思います。問題は、sed実行中のストリームで操作を実行できないことです。結果を次のファイルに入れると、うまく動作します。

cat output.txt | sed "s/some text/some text bolded/"

ただし、次のように実行出力に対して同じ操作を試みると:

command | sed "s/some text/some text bolded/"

sed何もしませんでした。どんなアイデアがありますか?

Lambertが有用に指摘したように、「sed何もしない」という私の声明はあいまいです。何が起こるかは、プログラムがstdoutパイプで接続されているにもかかわらず正常に出力されることです(書かないと確信しています)。stderrsed

問題は、コマンドが2番目のプログラムを呼び出してから標準出力に出力することです。最初のプログラムは、私が編集できる数行を印刷します。次に、2番目のプログラムで印刷された値のストリームがあります。これらの値は編集できません。

Perl メソッドと awk メソッドも動作しません。

ベストアンサー1

コマンドの出力がバッファリングされる可能性が高いです。コマンドが端末に書き込まれると、バッファは改行するたびにフラッシュされるため、予想される速度で表示されることがわかります。コマンドがパイプに書き込まれると、バッファは数キロバイトに達したときにのみフラッシュされるため、多くの遅延が発生します。これは標準入力/出力ライブラリのデフォルト動作です。

コマンドが出力に影響を与えないようにするには、unbuffer(予想から)またはstdbuf(GNU coreutilsで)を使用できます。

unbuffer command | sed …
stdbuf -o0 command | sed …

おすすめ記事