解析日志文件并打印正则表达式反向引用

解析日志文件并打印正则表达式反向引用

我想解析 my以打印出和/var/log/maillog中的电子邮件地址(主要是为了快速检查我配置的 DNS RBL 中的误报)from=<>to=<>

邮件日志条目如下所示(后缀):

Jun 20 17:27:52 foobarserver postfix/smtpd[15925]: NOQUEUE: reject: RCPT from sbr.nouveauquebec.com[184.22.154.110]: 554 5.7.1 Service unavailable; Sender address [[email protected]] blocked using urired.spameatingmonkey.net; Red listed, see http://spameatingmonkey.com/lookup/nouveauquebec.com; from=<[email protected]> to=<[email protected]> proto=ESMTP helo=<sbr.nouveauquebec.com>

我的正则表达式是

from=<(\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b)> to=<(\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b)>

我将匹配项存储在后面的引用中\1,并且\2我想打印出来。我想要做的是通过管道输出cat /var/log/maillog并在每一行上应用正则表达式并输出反向引用。

有没有一种快速的方法可以实现这一点?

答案1

这个使用简化的正则表达式和非贪婪量词:

perl -ne 's/^.*from=<(.+?@.+?)> to=<(.+?@.+?)>.*$/$1 $2/; print;' /var/log/maillog

答案2

使用sed:

sed -r -n 's/^.* from=<([^>]+)>\s*to=<([^>]+)>.*$/\1 \2/p' /var/log/maillog

相关内容