Postfix

通過mailq grep

  • December 4, 2019

我想過濾一些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 的最簡單方法是什麼?也許通過刪除(單個)換行符,然後greping 然後cuting?還是使用其他更合適的工具?

請解釋你的答案。我的主要興趣不是針對目前問題(按錯誤程式碼過濾)的複制粘貼解決方案,而是了解如何輕鬆解析此類多行輸出。

關於什麼:

grep -C 1 說:

-C 是上下文,在“說:”之前和之後返回一行。此外,為了將來參考,-A 用於之後,-B 用於之前。

grep -C 1 說: | grep ^

$$ 0-9 $$| 剪切 -f1 -d " " (用於 ID 列表)

如果您需要更複雜的東西,那麼您將不得不使用 awk。

我會使用 Perl 和Postfix::Parse::Mailq模組。

如果您不了解 Perl,則要正確編寫好腳本並非易事,但請隨時尋求幫助。

如果您對模組如何解析輸出感興趣,請檢查

引用自:https://serverfault.com/questions/174309