过滤日志文件的特定部分

过滤日志文件的特定部分

我需要过滤邮件日志以每天向我发送报告,以便我可以轻松跟踪被阻止的地址。

这是日志的一部分:

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

相关内容