เมื่อมีการใช้ที่ไม่โต้ตอบคำสั่งมาตรฐานส่วนใหญ่รวมถึงบัฟเฟอร์การส่งออกที่มีความหมายมันไม่ได้เขียนข้อมูลทันทีgrep
stdout
มันรวบรวมข้อมูลจำนวนมาก (ขึ้นอยู่กับระบบปฏิบัติการ, ใน Linux, มักจะ 4096 ไบต์) ก่อนที่จะเขียน
ในคำสั่งgrep
ของคุณเอาต์พุตของไพพ์จะเป็นstdin
ของsed
คำสั่งดังนั้นgrep
บัฟเฟอร์เอาต์พุต
ดังนั้น--line-buffered
ตัวเลือกที่ทำให้เกิดการgrep
ใช้บัฟเฟอร์บรรทัดหมายถึงการเขียนเอาต์พุตในแต่ละครั้งที่เห็นบรรทัดใหม่แทนที่จะรอถึง 4096 ไบต์ตามค่าเริ่มต้น แต่ในกรณีนี้คุณไม่จำเป็น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
เพื่อปิดการใช้งานบัฟเฟอร์
บันทึก