配信に失敗した電子メールに関する電子メールサーバーレポートを格納するメールボックスファイルを解析しています。悪い電子メールアドレスを抽出して、システムからそれらを削除したいです。ログファイルは次のようになります。
...some content...
The mail system
<slavicatomic118@hotmail.com>: host mx1.hotmail.com[65.54.188.94] said: 550
Requested action not taken: mailbox unavailable (in reply to RCPT TO
command)
...some content...
The mail system
<oki88@optimumpro.net>: host viking.optimumpro.net[79.101.51.82] said: 550
Unknown user (in reply to RCPT TO command)
...some content...
The mail system
<sigirna_luka@yahoo.com>: host mta5.am0.yahoodns.net[74.6.140.64] said: 554
delivery error: dd This user doesn't have a yahoo.com account
(sigirna_luka@yahoo.com) [0] - mta1172.mail.sk1.yahoo.com (in reply to end
of DATA command)
...etc.
電子メールアドレスは、「The mail system」の行の2行後に来ます。このようにgrepを使用すると、「メールシステム」行と次の2行が表示されます。
grep -A 2 "The mail system" mbox_file
ただし、この出力から「メールシステム」行と2番目の空行を削除する方法がわかりません。PHP / Perl / Pythonスクリプトを作成してそれを実行できると思いますが、grepまたは他の標準ツールでこれが可能かどうか疑問に思います。-Bパラメーターに負のオフセットを与えようとしました:
grep -A 2 -B -2 "The mail system" mbox_file
しかし、grepは文句を言います:
grep: -2: invalid context length argument
grepでこれを行う方法はありますか?