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 stdindari sedperintah, sehingga grepbuffer output-nya.
Jadi, --line-bufferedopsi yang menyebabkan grepmenggunakan 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 grepsama 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 -o0untuk menonaktifkan buffer.
Catatan