ログファイルの特定の部分フィルタリング

ログファイルの特定の部分フィルタリング

ブロックされたアドレスを簡単に追跡できるように、メールログをフィルタリングして毎日レポートを送信する必要があります。

これはログの一部です。

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「until」と「before」を:カットして「until」から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

2回使用したい行の2ビットをキャプチャし、それが言うように行われます\(...\)。デフォルトでは、さまざまな静的文字列を使用して正規表現を行に固定し、ビットが一致しない場合、行は出力されませsedん。式[^:]*とは、またはを含まない[^;]*すべての部分文字列(空にすることができます)と一致し、それぞれ部分文字列と一致します。:;.*

すべての式が一致すると、行全体を2つの収集された部分文字列と二重ダッシュに置き換えて、修正行を出力します。

質問のデータを考慮すると、結果は1行になります。

RCPT from cloud831541.educacaa.com.br[45.140.41.93] -- blocked using dnsbl.sorbs.net

関連情報