Я пытаюсь разобрать свой почтовый журнал, который содержит ряд строк, которые выглядят примерно так:
Jun 6 17:52:06 host sendmail[30794]: p569q3sX030792: to=<person@recipient.com>, ctladdr=<apache@host.com> (48/48), delay=00:00:03, xdelay=00:00:03, mailer=esmtp, pri=121354, relay=gmail-smtp-in.l.google.com. [1.2.3.4], dsn=2.0.0, stat=Sent (OK 1307354043 x8si28599066ict.63)
Правила, которые я пытаюсь применить:
- Дата всегда первые 2 слова
- Адрес электронной почты всегда находится между "to=person@recipient.com", однако адрес электронной почты может быть окружен <>
В журнале есть несколько строк, которые не относятся к получателю, поэтому я хотел бы полностью игнорировать эти строки.
Следующий код работает для каждого правила в отдельности, однако у меня возникают проблемы с их объединением:
if($_ =~ m/\ to=([<>a-zA-Z0-9\.\@]*),\ /g) {
print "$1\n";
}
if($_ =~ /^+(\S+\s+\S+\s)/g) {
print "$1\n";
}
Как всегда, я не уверен, является ли регулярное выражение, которое я использую выше, "лучшей практикой", поэтому не стесняйтесь указывать на все, что я тоже делаю плохо:)
Спасибо!