回答:
非対話形式で使用する場合、ほとんどの標準コマンドにはincludeが含まれgrep
、出力をバッファリングします。つまり、すぐにデータを書き込みませんstdout
。書き込みの前に大量のデータ(OSではLinuxに依存、多くの場合4096バイト)を収集します。
あなたのコマンドでは、grep
の出力がにパイプされたstdin
のsed
ように、コマンドgrep
の出力をバッファリングします。
そのため、デフォルトで4096バイトに達するのを待つのではなく、改行を検出するたびに出力を書き込むことを意味する、ラインバッファー--line-buffered
をgrep
使用するオプション。ただし、この場合、まったく必要ありませんgrep
。単にtail
+を使用しますsed
。
tail -f <file> | sed '/string/s/stuff//g' >> output.txt
バッファーを変更するオプションのないコマンドを使用すると、GNU coreutils stdbufを使用できます
tail -f <file> | stdbuf -oL fgrep "string" | sed 's/stuff//g' >> output.txt
行バッファリングをオンに-o0
するか、バッファを無効にするために使用します。
注意