Saya mem-parsing file kotak surat yang menyimpan laporan server email untuk email yang gagal terkirim. Saya ingin mengekstrak alamat email yang salah, sehingga saya menghapusnya dari sistem. File log terlihat seperti ini:
...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.
Alamat surel datang 2 baris setelah satu baris dengan "Sistem surat". Menggunakan grep seperti ini memberi saya baris "Sistem surat" dan dua baris berikutnya:
grep -A 2 "The mail system" mbox_file
Namun, saya tidak tahu cara menghapus baris "Sistem surat" dan baris kosong kedua dari keluaran ini. Saya kira saya bisa menulis skrip PHP / Perl / Python untuk melakukannya, tapi saya ingin tahu apakah ini mungkin dengan grep atau alat standar lainnya. Saya mencoba memberikan offset negatif ke parameter -B:
grep -A 2 -B -2 "The mail system" mbox_file
Tapi grep mengeluh:
grep: -2: invalid context length argument
Apakah ada cara untuk melakukan ini dengan grep?