Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 如何解析这些行?啊?perl?_Shell_Parsing - Fatal编程技术网

Shell 如何解析这些行?啊?perl?

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

我有一些涉及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 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]:
字段之后,条目是逗号分隔的,而不是空格分隔的。