我需要过滤邮件日志以每天向我发送报告,以便我可以轻松跟踪被阻止的地址。
这是日志的一部分:
Oct 2 14:22:49 mail postfix/smtp/smtpd[3401121]: NOQUEUE: reject: RCPT from cloud831541.educacaa.com.br[45.140.41.93]: 554 5.7.1 Service unavailable; Client host [45.140.41.93] blocked using dnsbl.sorbs.net; Currently Sending Spam See: http://www.sorbs.net/lookup.shtml?45.140.41.93; from=<[email protected]> to=<leonardo@home-server> proto=ESMTP helo=<cloud831541.educacaa.com.br>
Oct 2 14:26:02 mail postfix/smtp/smtpd[3403329]: NOQUEUE: reject: RCPT from ws21763.adcote.com.br[185.249.200.83]: 554 5.7.1 Service unavailable; Helo command [ws217632.adcote.com.br] blocked using dbl.spamhaus.org; https://www.spamhaus.org/query/domain/adcote.com.br; from=<[email protected]> to=<leonardo@home-server> proto=ESMTP helo=<ws217632.adcote.com.br>
Oct 2 14:43:51 mail postfix/smtp/smtpd[3403329]: NOQUEUE: reject: RCPT from o12.mailer.shopify.com[149.72.90.155]: 554 5.7.1 Service unavailable; Client host [149.72.90.155] blocked using spam.dnsbl.sorbs.net; Spam Received See: http://www.sorbs.net/lookup.shtml?149.72.90.155; from=<bounces+12398229-c901-leonardo=home-server.net.br@mailer.shopifyemail.com> to=<leonardo@home-server> proto=ESMTP helo=<o12.mailer.shopify.com>
我需要从RCPT from
“直到”:
和“之前”进行剪切554 5.7.1
,并从blocked using
“直到;
”之前进行打印Currently Sending
。
所以输出会是这样的=
RCPT from cloud831541.educacaa.com.br[45.140.41.93] -- blocked using dnsbl.sorbs.net
一种更容易检查谁被我的邮件过滤器阻止的方法。
我很感激任何帮助。
答案1
似乎下面的长sed
替换可能会满足您的要求。
sed -n 's/.*\(RCPT from[^:]*\):.*554 5\.7\.1.*\(blocked using[^;]*\);.*Currently Sending.*/\1 -- \2/p' file
它通过捕获您想要使用两次的行的两位来完成您所说的操作\(...\)
。我们主要使用各种静态字符串将正则表达式锚定到该行,如果任何位不匹配,sed
则不会输出该行。表达式[^:]*
和[^;]*
将分别匹配任何不包含:
或 的子字符串(可能为空) ;
,并且.*
匹配任何子字符串。
如果所有表达式都匹配,我们将使用两个收集到的子字符串和双破折号替换整行,然后输出修改后的行。
考虑到问题中的数据,结果将是一行。
RCPT from cloud831541.educacaa.com.br[45.140.41.93] -- blocked using dnsbl.sorbs.net