성공적으로 배달되지 않은 전자 메일에 대한 전자 메일 서버 보고서를 저장하는 사서함 파일을 구문 분석하고 있습니다. 잘못된 전자 메일 주소를 추출하여 시스템에서 제거하려고합니다. 로그 파일은 다음과 같습니다.
...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.
이메일 주소는 "메일 시스템"으로 한 줄 뒤에 2 줄이됩니다. 이와 같이 grep을 사용하면 "메일 시스템"줄과 다음 두 줄이 나옵니다.
grep -A 2 "The mail system" mbox_file
그러나이 출력에서 "메일 시스템"줄과 두 번째 빈 줄을 제거하는 방법을 모르겠습니다. PHP / Perl / Python 스크립트를 작성하여 작성할 수 있다고 생각하지만 grep 또는 다른 표준 도구로 이것이 가능한지 궁금합니다. -B 매개 변수에 음수 오프셋을 주려고했습니다.
grep -A 2 -B -2 "The mail system" mbox_file
그러나 grep은 불평합니다.
grep: -2: invalid context length argument
grep으로 이것을 할 수있는 방법이 있습니까?