我的sed的印象並沒有阻止,因爲當我不這樣說:是sed阻塞?
iostat | sed
sed
處理數據,因爲它來了,但是當我做
iostat | sed | netcat
然後sed
塊netcat
。
對嗎?
我的sed的印象並沒有阻止,因爲當我不這樣說:是sed阻塞?
iostat | sed
sed
處理數據,因爲它來了,但是當我做
iostat | sed | netcat
然後sed
塊netcat
。
對嗎?
sed
當它不打印到終端時將在緩衝模式下工作。這意味着它會在默認進行任何處理和輸出之前嘗試填充其內部緩衝區。
這樣做是爲了提高吞吐量,因爲通常在管道中,您並不關心時間,但希望儘可能多地在給定的時間內處理數據。
傳遞-u
到sed會告訴它無緩衝地工作,因此工作方式與輸出到終端時相同。
我不知道我理解的問題的權利,但在你的榜樣,它應該是這樣的:
除此之外,sed不需要讀取所有輸入來產生輸出。
您是否觀察到無法通過此緩衝和某些小緩衝解釋的延遲?
除了@saua所說的以外,sed
至少是面向行的,它讀取一行,然後對其進行操作,以便至少緩衝一行。此外,sed
可以工作在多線模式。如果您正在使用多行模式,則sed
無法輸出當前緩衝區,直到它知道該模式不適用或模式已處理完畢。
stdbuf
可以協助改變標準io流的緩衝行爲。你可以試試這個改變緩衝行爲:
... | stdbuf -oL -eL sed -e ... | ...
sed的:非法選項 - U – CommaToast 2016-08-15 22:55:10