Postfix
通過mailq grep
我想過濾一些
mailq
(Postfix)返回的郵件ID。但是,格式不是非常“grep-friendly”,因為單個郵件的資訊跨越多行:9F701869D2 1356 Mon Aug 23 12:13:43 some@sender (host some.host[1.2.3.4] said: 450 4.1.1 some error message) some@recipient 9437586CF4 3153 Sat Aug 21 09:36:40 some@other.sender (host some.host[1.2.3.4] said: 450 4.1.1 some error message) some@other.recipient
例如,獲取發生某些特定錯誤程式碼的所有郵件 ID 的最簡單方法是什麼?也許通過刪除(單個)換行符,然後
grep
ing 然後cut
ing?還是使用其他更合適的工具?請解釋你的答案。我的主要興趣不是針對目前問題(按錯誤程式碼過濾)的複制粘貼解決方案,而是了解如何輕鬆解析此類多行輸出。
關於什麼:
grep -C 1 說:
-C 是上下文,在“說:”之前和之後返回一行。此外,為了將來參考,-A 用於之後,-B 用於之前。
grep -C 1 說: | grep ^
$$ 0-9 $$| 剪切 -f1 -d " " (用於 ID 列表)
如果您需要更複雜的東西,那麼您將不得不使用 awk。
我會使用 Perl 和Postfix::Parse::Mailq模組。
如果您不了解 Perl,則要正確編寫好腳本並非易事,但請隨時尋求幫助。
如果您對模組如何解析輸出感興趣,請檢查源