Sed
將 tail -f 與 sed 和 xargs 一起使用
/tmp/test
假設我有以下過程每秒向文件寫入一個數字+單引號:for i in {1..1000} ; do echo $i\' ; sleep 1 ; done > /tmp/test
然後我想
tail -f
通過另一個函式使用和執行它。出於測試目的,我正在使用echo
:tail -f /tmp/test | xargs echo
這給了我以下錯誤(在輸入中沒有引號的情況下執行它可以正常工作):
xargs: unmatched single quote; by default quotes are special to xargs unless you use the -0 option
如果我將 sed 添加到等式中,我根本不會得到任何輸出:
tail -f /tmp/test | sed "s/['\"]//g" | xargs echo
任何想法為什麼我在添加後沒有輸出
sed
,或者我如何在輸入之前從輸入中去除引號xargs
?
有很多事情。
首先:“tail -f”永遠不會結束,所以“xargs”同樣會無限期地繼續執行。您可以打開第二個視窗以“kill -HUP”“tail -f”程序以使“tail -f”和“xargs”都完成,從而產生輸出。
第二:“xargs”正在緩衝輸入,並沒有得到它認為的“完整緩衝區”,所以在輸出 1000 秒標記時,它甚至還沒有執行一次 echo 命令。如果您希望“xargs”為每個輸入行分別執行 echo,則需要向 xargs 添加“-n 1”選項。
至於“xargs”不喜歡單引號,您可以使用選項“-d ‘\n’”來禁用引號處理,並且只用換行符分隔輸入參數。