Linux
將多個 unix 命令合併為一個輸出
我需要在我們的郵件日誌中搜尋特定的電子郵件地址。我們在同一個文件夾中保留了一個名為maillog的目前文件以及一周的 .bz2 文件。目前,我正在執行以下命令來搜尋文件:
grep person@domain.com maillog bzgrep person@domain.com *.bz2
有沒有辦法將
grep
andbzgrep
命令組合成一個輸出?這樣,我可以將組合結果通過管道傳輸到單個電子郵件或單個文件。
另一種方法是
{ grep ...; bzgrep ...;} >file
&&
有如果失敗bzgrep
就不會執行的困難。grep
請注意最後一個命令後的左大括號和分號後的強制空格。或者,您可以使用不那麼挑剔的 subshell 語法(括號而不是花括號):
(grep ...; bzgrep ...) >file
如果文件未經過 bzip 壓縮,bzgrep 會自動預設為正常 grep。因此,以下內容就足夠了:
bzgrep person@domain.com maillog *bz2 | mail -s "logs yay" someuser@blah
哦,當然這也是我的強制性GNU Parallel解決方案:
parallel -m bzgrep person@domain.com ::: maillog* *bz2 | mail -s "logs yay" someuser@blah
如果您要檢查大量文件,這可能會快很多。