通过 mailq 进行 grep

通过 mailq 进行 grep

我想过滤mailq(Postfix) 返回的一些邮件 ID。但是,格式不太“grep 友好”,因为单身的邮件跨度多种的行:

  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  [email protected]
  (host some.host[1.2.3.4] said: 450 4.1.1 some error message)
                                           [email protected]

例如,获取发生特定错误代码的所有邮件 ID 的最简单方法是什么?也许通过删除(单个)换行符,然后greping 再cuting?或者通过使用其他更合适的工具?

请解释您的答案。我的主要兴趣不是针对当前问题(按错误代码过滤)的复制粘贴解决方案,而是了解如何轻松解析此类多行输出。

答案1

关于什么:

grep -C 1 说:

-C 是上下文,返回“said:”前后各一行。另外,供以后参考,-A 表示之后,-B 表示之前。

grep -C 1 说:| grep ^[0-9] | cut -f1 -d " "

(获取 ID 列表)

如果您需要更复杂的东西,那么您必须使用 awk。

答案2

我会使用 Perl 和Postfix::Parse::Mailq模块。
如果你不懂 Perl,那么编写好的脚本并不容易,但可以随时寻求帮助。
如果你对模块如何解析输出感兴趣,请检查来源

答案3

韋斯特是解析 mailq 或 postqueue 的简洁方法:

https://github.com/alexjurkiewicz/apq

在此处输入图片描述

答案4

只要你能找到方法来隔离发送者或接收者的地址,就可以使用 awk 来解析 mailq:

mailq | grep @ | awk {'print $7'}

相关内容