Hello,
is there any way to extract the queued ID (7BC5A446) from the first line and
also match the second with only one regex??
#!/usr/bin/perl
use strict;
use warnings;
use 5.010;
while(<DATA>){
if
(/^(?<Month>\S+?)\s+?(?<Day>\S+?)\s+?(?<Time>\S+?)\s+?(?<Host>\S+?)\s+?(?<Program>\S+?):\s+?(?<QueueNumber>\S+?):\s+?to=(?<To>\S+?),\s+?relay=(?<relay>\S+?),\s+?delay=(?<delay>\S+?),\s+?delays=(?<delays>\S+?),\s+?dsn=(?<dsn>\S+?),\s+?status=(?<status>\S+?)\s+?(?<statusMsg>(?:queued
as (?<NextQueueID>.*))?.*)$/i) {
my $nextQueueID = $+{NextQueueID} || "None";
say "LineType: \"To\" 1: $+{Month} 2: $+{Day} 3: $+{Time} 4: $+{Host}
5: $+{Program} 6: $+{QueueNumber} 7: $+{To} 8: $+{relay} 9: $+{delay} 10:
$+{delays} 11: $+{dsn} 12: $+{status} 13: $+{statusMsg} 14: $nextQueueID";
} else {
say "ERROR with line: ".$_
}
}
__DATA__
Mar 5 10:05:45 antispam3 postfix/smtp[1595]: 4CE0081:
to=<[email protected]>, relay=clamav.example.com[1.1.1.1]:25, delay=0.31,
delays=0.14/0/0.01/0.16, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as
7BC5A446)
Mar 5 10:06:37 antivir1 postfix/smtp[8193]: 7BC5A446:
to=<[email protected]>, relay=mail.example.com[2.2.2.2]:25, delay=52,
delays=0.15/50/0.03/2.1, dsn=2.5.0, status=sent (250 2.5.0 Ok.)
--
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
http://learn.perl.org/