Shell 如何解析这些行?啊?perl?
我有一些涉及postgree的mail.log行,我想从中提取变量来生成自己的自定义报告(我不喜欢postgreereport)。线条如下所示:Shell 如何解析这些行?啊?perl?,shell,parsing,Shell,Parsing,我有一些涉及postgree的mail.log行,我想从中提取变量来生成自己的自定义报告(我不喜欢postgreereport)。线条如下所示: Jul 15 01:08:50 mail postgrey[14184]: action=pass, reason=triplet found, delay=511, client_name=a0i108.smtpcorp.com, client_address=64.131.95.193, sender=xx@xx, recipient=xx@xx
Jul 15 01:08:50 mail postgrey[14184]: action=pass, reason=triplet found, delay=511, client_name=a0i108.smtpcorp.com, client_address=64.131.95.193, sender=xx@xx, recipient=xx@xx
Jul 17 00:10:53 mail postgrey[3953]: action=greylist, reason=new, client_name=outbound.na.e.paypal.com, client_address=96.47.30.204, sender=0687VFT-RNOEGR-FXQOI6-XTJG5DO-OF2K7B-H-M2-20140717-d0a7662385177@na.e.paypal.com, recipient=xx@xx
我想基本上读取所有匹配postgree.*action=
的行,并将字段拉入变量,例如action=$1,reason=$2
,然后使用这些变量打印我自己的自定义报告或日志。一个更大的好处是不丢弃以前已经丢弃的线路
提前谢谢。收到了:
#!/usr/bin/perl
while (my $line = <STDIN>)
{
if ($line =~ /postgrey\[\d+\]: action=(.*), reason=(.*?),.* client_name=(\S+), client_address=(\S+), sender=(\S+), recipient=(\S+)/)
{
print "Action: $1\n";
print "Reason: $2\n";
print "Client: $3 ($4)\n";
print "From: $5\n";
print "To: $6\n\n";
}
}
#/usr/bin/perl
while(我的$line=)
{
如果($line=~/postgray\[\d+\]:操作=(*)、原因=(.*)、客户端名称=(\S+)、客户端地址=(\S+)、发件人=(\S+)、收件人=(\S+/)
{
打印“操作:$1\n”;
打印“原因:$2\n”;
打印“客户端:$3($4)\n”;
打印“发件人:$5\n”;
打印“收件人:$6\n\n”;
}
}
从没想过我会为一个代表人数>1000的OP写这篇评论,但是。。。“请发布到目前为止您尝试过的代码以及不起作用的代码。”可能没有代码,因为我完全不知道从哪里开始。工具如何知道哪些记录以前被转储过?我可能会使用Perl来实现这一点,但我对Perl的了解比Python要好。我可能不会使用awk
;在awk
中处理key=value
符号要比在Perl中处理稍显笨拙。您尚未显示任何希望输出显示的格式。我可能会使用拆分来处理行,然后使用正则表达式来分析key=value
字段。您需要研究使用的约定;似乎在postgray[number]:
字段之后,条目是逗号分隔的,而不是空格分隔的。