Etkileşimli olmayanları kullanırken, çoğu standart komut, grepderhal veri yazmadığı anlamına gelen çıktının arabelleğe alınmasını içerir stdout. Yazmadan önce büyük miktarda veri toplar (işletim sistemine bağlı, Linux'ta, genellikle 4096 bayt).
Emriniz olarak, grep'ın çıkış taşınıyor stdinarasında sed, yani komuta grepçıkışını tampon.
Bu nedenle, --line-bufferedseçenek greparabellek kullanmaya neden olan seçenek , varsayılan olarak 4096 bayta ulaşmayı beklemek yerine, her yeni satırda çıktı çıktığında yazma anlamına gelir. Ancak bu durumda, hiç ihtiyacınız yok grep, sadece tail+ kullanın sed:
tail -f <file> | sed '/string/s/stuff//g' >> output.txt
Tampon değiştirme seçeneği olmayan komut ile GNU coreutils stdbuf kullanabilirsiniz
tail -f <file> | stdbuf -oL fgrep "string" | sed 's/stuff//g' >> output.txt
-o0Tamponu açmak veya tamponu devre dışı bırakmak için kullanmak
Not