我試圖在 bash 中抑制某個命令的某些輸出,這與抑制所有輸出不同,因為除了我想忽略的重復數百次的幾行之外,大多數輸出??都是有用的。
用例:我有一個 CI 服務器,在構建程序中的某個時刻,我發布了一個 dotnet lambda 函式:
dotnet lambda package {...}
除了這里和那里的幾個記錄器呼叫之外,大多數日志輸出都很有用。無法通過命令列切換到命令本身來抑制這些,這使得我的構建日志比我希望的要大得多:
48.67 ... publish: FooBar.Client -> {...}/FooBar.Client.dll <<< Useful
49.29 ... publish: FooBar -> {...}/bootstrap.dll
49.71 ... publish: FooBar -> {...}/publish/
49.73 Changed permissions on published file (chmod rx appsettings.json). <<< Meh
[Repeated many times for other files]
#12 49.91 ... zipping: adding: appsettings.json (deflated 29%) <<< Meh
[Repeated many times for other files]
僅當該行包含Changed permissions on published file或 時,我才想將輸出抑制為標準輸出zipping。我該怎么做?
uj5u.com熱心網友回復:
您可以使用grep -v過濾掉標準輸出上包含兩個搜索字串的行,同時列印所有其他字串。這樣做并留下 stderr 獨自一人:
dotnet lambda package {...} | grep -v -e 'Changed permissions on published file' -e 'zipping'
您可能還想添加--line-buffered告訴 grep 立即列印行而不是緩沖其輸出。如果您嘗試實時查看日志,這會很有幫助,但如果日志只是要在磁盤上稍后查看,我就不會使用它,因為它會使 grep 變慢一點。
dotnet lambda package {...} | grep -v --line-buffered -e 'Changed permissions on published file' -e 'zipping'
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/346494.html
