Sed

無法從 sed 重定向輸出

  • March 25, 2020

我正在通過 sed 從時鐘輸出輸出以從數字中刪除前導零。它看起來像這樣:

clock -sf 'S%A, %B %d. %I:%M %P' | sed 's/\b0\+\([0-9]\+\)/\1/g'

這工作正常並產生我想要的輸出。

但是,當我嘗試將輸出重定向到文件時,沒有任何內容寫入文件。以下不起作用。

clock -sf 'S%A, %B %d. %I:%M %P' | sed 's/\b0\+\([0-9]\+\)/\1/g' > testfile

沒有任何東西寫入測試文件。我究竟做錯了什麼?

您遇到了輸出緩衝問題。sed通常在不寫入終端時緩衝其輸出,因此在緩衝區填滿(可能每 4K 字節)之前沒有任何內容寫入文件。

使用-u選項sed來取消緩衝輸出。

clock -sf 'S%A, %B %d. %I:%M %P' | sed -u 's/\b0\+\([0-9]\+\)/\1/g' > testfile

我在嘗試從流輸出源重定向時遇到了同樣的問題。

您應該將-u(無緩衝)標誌與 sed 一起使用,然後 PIPE 數據而不是使用>>運算符附加它(>>鎖定文件並阻塞)。

而是做以下工作

someprogram | sed '/filter/' | tee myfile.txt

引用自:https://unix.stackexchange.com/questions/153210