Sed
無法從 sed 重定向輸出
我正在通過 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