Saat menggunakan non-interaktif, sebagian besar perintah standar, termasuk grep
, buffer output, artinya tidak segera menulis data stdout
. Ia mengumpulkan sejumlah besar data (tergantung pada OS, di Linux, sering 4096 byte) sebelum menulis.
Dalam perintah Anda, grep
's output yang disalurkan ke stdin
dari sed
perintah, sehingga grep
buffer output-nya.
Jadi, --line-buffered
opsi yang menyebabkan grep
menggunakan buffer garis, artinya menulis keluaran setiap kali melihat baris baru, alih-alih menunggu untuk mencapai 4.096 byte secara default. Tetapi dalam hal ini, Anda tidak perlu grep
sama sekali, cukup gunakan tail
+ sed
:
tail -f <file> | sed '/string/s/stuff//g' >> output.txt
Dengan perintah yang tidak memiliki opsi untuk memodifikasi buffer, Anda dapat menggunakan GNU coreutils stdbuf
tail -f <file> | stdbuf -oL fgrep "string" | sed 's/stuff//g' >> output.txt
untuk mengaktifkan buffering garis atau gunakan -o0
untuk menonaktifkan buffer.
Catatan