Etkileşimli olmayanları kullanırken, çoğu standart komut, grep
derhal 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 stdin
arasında sed
, yani komuta grep
çıkışını tampon.
Bu nedenle, --line-buffered
seçenek grep
arabellek 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
-o0
Tamponu açmak veya tamponu devre dışı bırakmak için kullanmak
Not