ฉันกำลังรวบรวมการนำเสนอสำหรับผู้ชมที่ไม่ใช่ด้านเทคนิค ฉันมีโปรแกรมที่ทำงานในการทุบตีที่ส่งออกกระแสอย่างต่อเนื่องของค่าบางอย่างที่มีความสำคัญ ฉันต้องการเน้นผลลัพธ์ที่สำคัญตามที่ปรากฏเพื่อให้ผู้ชมได้รับแนวคิดเกี่ยวกับความถี่ของพวกเขา ปัญหาคือฉันไม่สามารถsed
ทำงานบนสตรีมที่กำลังทำงานอยู่ได้ มันทำงานได้ดีถ้าฉันใส่ผลลัพธ์ลงในไฟล์เช่นเดียวกับใน:
cat output.txt | sed "s/some text/some text bolded/"
แต่ถ้าฉันลองแบบเดียวกันกับเอาต์พุตที่กำลังทำงานอยู่เช่นนี้
command | sed "s/some text/some text bolded/"
sed
ไม่ทำอะไรเลย ความคิดใด ๆ
ขณะที่แลมเบิร์ตมีประโยชน์พอที่จะชี้ให้เห็นคำพูดของฉันที่sed
ไม่ทำอะไรคลุมเครือ สิ่งที่เกิดขึ้นคือการที่เอาท์พุทโปรแกรมstdout
(ฉันค่อนข้างมั่นใจว่ามันไม่ได้เขียนไปstderr
) sed
ตามที่ปกติแม้ว่ามันประปาผ่าน
ปัญหาน่าจะเป็นที่คำสั่งเรียกโปรแกรมที่สองซึ่งจากนั้นส่งออกไปยัง stdout มีบางบรรทัดที่พิมพ์โดยโปรแกรมแรก สิ่งเหล่านี้ฉันสามารถแก้ไขได้ จากนั้นจะมีกระแสของค่าที่พิมพ์โดยโปรแกรมที่สอง สิ่งเหล่านี้ฉันไม่สามารถแก้ไขได้
วิธี Perl และ awk ไม่ทำงานเช่นกัน
command|egrep 'some text|$'
g
ทดแทนที่มี "ทั่วโลก" มิฉะนั้นเฉพาะที่เกิดขึ้นครั้งแรกในบรรทัดที่จะถูกแทนที่:sed "s/old/new/g"
stdbuf -o0 command | sed "s/some text/some text bolded/"
ทำงานหรือไม่