数字から先行ゼロを削除するために、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