เมื่อมีการใช้ที่ไม่โต้ตอบคำสั่งมาตรฐานส่วนใหญ่รวมถึงบัฟเฟอร์การส่งออกที่มีความหมายมันไม่ได้เขียนข้อมูลทันที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เพื่อปิดการใช้งานบัฟเฟอร์
บันทึก