加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

perl 遇到的贪婪匹配的问题

发布时间:2020-12-15 23:44:43 所属栏目:大数据 来源:网络整理
导读:api:/root# cat 1.log | grep AAAAA10.171.246.184 - - [14/May/2015:16:30:29 +0800] "GET /web/noauth?method=%2FproductAAAAAA?api:/root# perl sum.pl $var1 is GET /web/loginInfo?$var1 is GET /web/loginInfo?$var1 is GET /web/loginInfo?$var1 is G
api:/root# cat 1.log | grep AAAAA
10.171.246.184 - - [14/May/2015:16:30:29 +0800] "GET /web/noauth?method=%2FproductAAAAAA?
api:/root# perl sum.pl 
$var1 is GET /web/loginInfo?
$var1 is GET /web/loginInfo?
$var1 is GET /web/loginInfo?
$var1 is GET /web/loginInfo?
$var1 is GET /business/dispatch_get.do?
$var1 is GET /web/noauth?method=%2FproductAAAAAA?
$var1 is GET /web/loginInfo?
$var1 is GET /web/noauth?
$var1 is GET /business/dispatch_get.do?
$var1 is GET /web/noauth?

use HTTP::Date qw(time2iso str2time time2iso time2isoz);
my $CurrTime = (split / /,time2iso(time()))[0];
my %log;
#if ( $#ARGV < 1 ){  
#        print "please input your date!n";
#                exit(-1);  
#                    } 
#                    $date= $ARGV[0];  
#                    $ip_addr = $ARGV[1];
#统计每个IP的访问次数
                   #glob函数 每次返回符合条件的文件名
                    @file = glob "./1.log";
                   foreach $file (@file){
#                   print "------file is $file-----------n";
                    open (LOG,"<","$file");
                    while (<LOG>) {
                    chomp;
                    ##正则条件匹配
                    if ($_ =~ /(d{1,3}.d{1,3})/){
                    #print "$1 is $1n";
                    $var= $1;
                    $log{$var}++;
                    }
                    if ($_ =~ /.*]*(GET.*?).*/){
                    $var1 = $1;
                   print "$var1 is $var1n";
                    $log1{$var1}++;
                    }
}};
                   while(my($ip,$times) = each %log) {
                   print "$ip 访问次数是 $timesn";
};
                   while(my($html,$times) = each %log1) {
                   print "$html 访问次数是  $timesn";
};




此时会贪婪匹配到 [14/May/2015:16:30:29 +0800] "GET /web/noauth?method=%2FproductAAAAAA?

-------------------------------------------------------------------------------------------------------
my %log;
#if ( $#ARGV < 1 ){  
#        print "please input your date!n";
#                exit(-1);  
#                    } 
#                    $date= $ARGV[0];  
#                    $ip_addr = $ARGV[1];
#统计每个IP的访问次数
                   #glob函数 每次返回符合条件的文件名
                    @file = glob "./1.log";
                   foreach $file (@file){
#                   print "------file is $file-----------n";
                    open (LOG,3})/){
                    #print "$1 is $1n";
                    $var= $1;
                    $log{$var}++;
                    }
                    if ($_ =~ /.*]*(GET.*??).*/){
                    $var1 = $1;
                   print "$var1 is $var1n";
                    $log1{$var1}++;
                    }
}};
                   while(my($ip,$times) = each %log1) {
                   print "$html 访问次数是  $timesn";
};

取消贪婪匹配: 此时只匹配到/web/noauth?

api:/root# perl sum.pl 
$var1 is GET /web/loginInfo?
$var1 is GET /web/loginInfo?
$var1 is GET /web/loginInfo?
$var1 is GET /web/loginInfo?
$var1 is GET /business/dispatch_get.do?
$var1 is GET /web/noauth?


(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读