sed 出力をリダイレクトできません。

sed 出力をリダイレクトできません。

数字から先行ゼロを削除するために、sedを介してクロック出力をパイプしました。次のようになります。

clock -sf 'S%A, %B %d. %I:%M %P' | sed 's/\b0\+\([0-9]\+\)/\1/g'

これはうまく機能し、私が望む出力を生成します。

ただし、出力をファイルにリダイレクトしようとすると、ファイルには何も書き込まれません。以下は機能しません。

clock -sf 'S%A, %B %d. %I:%M %P' | sed 's/\b0\+\([0-9]\+\)/\1/g' > testfile

テストファイルには何も記録されません。私は何が間違っていましたか?

答え1

出力バッファリングの問題があります。sed端末は通常、出力に書き込まないと出力をバッファリングするため、バッファがいっぱいになるまで(おそらく4Kバイトごとに)ファイルには何も書き込まれません。

-u出力バッファリングをオフにするには、オプションを使用しますsed

clock -sf 'S%A, %B %d. %I:%M %P' | sed -u 's/\b0\+\([0-9]\+\)/\1/g' > testfile

答え2

ストリーミング出力ソースからリダイレクトしようとしても同じ問題が発生しました。

sedで(バッファリングされていない)フラグを使用してから、演算子を使用してデータを追加する-u代わりに(ファイルのロックとブロック)データをパイプする必要があります。>>>>

代わりに、次の操作を行います。

someprogram | sed '/filter/' | tee myfile.txt

関連情報