Tôi đang phân tích một tệp hộp thư lưu trữ các báo cáo máy chủ email cho e-mail được gửi không thành công. Tôi muốn trích xuất các địa chỉ e-mail xấu, để tôi xóa chúng khỏi hệ thống. Tệp nhật ký trông như thế này:
...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.
Địa chỉ email có 2 dòng sau một dòng với "Hệ thống thư". Sử dụng grep như thế này cho tôi dòng "Hệ thống thư" và hai dòng tiếp theo:
grep -A 2 "The mail system" mbox_file
Tuy nhiên, tôi không biết cách xóa dòng "Hệ thống thư" và dòng trống thứ hai khỏi đầu ra này. Tôi đoán rằng tôi có thể viết kịch bản PHP / Perl / Python để làm điều đó, nhưng tôi tự hỏi liệu điều này có thể với grep hoặc một số công cụ tiêu chuẩn khác. Tôi đã cố gắng đưa ra bù âm cho tham số -B:
grep -A 2 -B -2 "The mail system" mbox_file
Nhưng grep phàn nàn:
grep: -2: invalid context length argument
Có cách nào để làm điều này với grep không?