You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Postfix邮件日志脚本优化:过滤冗余日志内容

过滤mail.log已发送邮件日志中的冗余字段

问题背景

我编写了一个从/var/log/mail.log中查看已发送邮件的简单脚本,用grc对结果着色,代码如下:

log='/var/log/mail.log'
grc grep "status=sent" $log | \
egrep -ve 'postfix/(cleanup|pickup|master|qmgr|smtpd|local|pipe)'

脚本运行正常,但想过滤掉类似delay=0.34, delays=0.01/0.02/0.14/0.16, dsn=2.0.0的冗余内容,该怎么实现?


解决方案

嘿,这个需求很常见,咱们可以在现有管道里加个sed命令来精准匹配并移除这些冗余字段。修改后的脚本如下:

log='/var/log/mail.log'
grc grep "status=sent" "$log" | \
egrep -ve 'postfix/(cleanup|pickup|master|qmgr|smtpd|local|pipe)' | \
sed -E 's/(delay=[0-9.]+,?|delays=[0-9./]+,?|dsn=[0-9.]+,?)//g; s/  +/ /g'

关键部分解释:

  • sed -E:启用扩展正则表达式,让正则语法更简洁易读,不用频繁转义特殊字符
  • s/(delay=[0-9.]+,?|delays=[0-9./]+,?|dsn=[0-9.]+,?)//g:批量匹配并清空三种冗余字段:
    • delay=[0-9.]+,?:匹配delay=xxx格式,,?兼容字段末尾可能带的逗号
    • delays=[0-9./]+,?:匹配delays=x/x/x/x格式,适配斜杠分隔的数值
    • dsn=[0-9.]+,?:匹配dsn=x.x.x格式的状态码
  • s/ +/ /g:移除字段后可能会留下连续空格,这一步把多个空格合并成单个,让日志输出更整洁

如果之后要过滤其他类似key=value格式的冗余字段,比如size=1234,只需要在括号里追加新的模式即可:

sed -E 's/(delay=[0-9.]+,?|delays=[0-9./]+,?|dsn=[0-9.]+,?|size=[0-9]+,?)//g; s/  +/ /g'

另外小建议:给$log变量加上双引号"$log",避免日志路径里出现空格时脚本出错,这是写bash脚本的好习惯哦~

内容的提问来源于stack exchange,提问作者SamTzu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:27:32