神奇的Perl-正则表达式(3)
程序员文章站
2022-05-09 15:57:22
...
声明:本神奇的Perl系列为刘兴(http://deepfuture.iteye.com/)原创,未经笔者授权,任何人和机构不能转载
2.1 特殊字符匹配
在Perl 正则中,某些字符具有特殊含义,譬如“?”、“*”、“.”、“+”等。如果模式串需要把这些符号当作纯文本来处理的话,就必须在它前面加上反斜杠(\)。
比如:
#perl4-2.pl my $name="你叫什么名字?"; my $filename="plane.jpg"; if ($name=~m/\?/){ print "$name是疑问句\n";#匹配疑问句 } if ($filename=~m/\.jpg$/){ print "$filename为JPG类型图像文件\n";#文件扩展名为jpg }
输出结果如下:
你叫什么名字?是疑问句
plane.jpg为JPG类型图像文件
2.2 第五个任务公司新开发的小型ERP系统试运行时,经常出故障,小黄奉命查出故障来源,系统记录用户操作保存在run.log的日志文件中。
run.log的结构大致如下,每列信息以#相隔。
2010-07-01#09:12:10#zhangsang login success
2010-07-01#09:15:30#zhangsang save success
2010-07-01#09:16:50#lisi login error#系统错误#用户不存在
2010-07-01#09:18:05#zhangsang exit success
2010-07-01#13:19:10#wangwu login error#系统错误#密码错误
2010-07-02#09:20:10#lisi login success
2010-07-02#09:31:32#lisi save error#SQL执行失败#insert error
2010-07-02#09:28:32#lisi exit success
由于日志文件过于巨大,小黄无法人工查找错误,只能用perl编写以下脚本筛选错误,并将错误输出到单独的文本文件runerr.txt中。
#perl4-3.pl use strict; use warnings; open LOG,"<run.log"; open ERRLOG,">runerr.txt"; foreach my $line(<LOG>){ if ($line=~m/error/i) {#只匹配日志中的错误事件,错误事件都包括“error”字符 chomp($line);#去除换行符 (my $mydate,my $mytime,my $mysj,my $myerr,my $errinfo)=split("#",$line);#获取事件信息 print ERRLOG "--------\n"; print ERRLOG "日期:$mydate\n时间:$mytime\n事件:$mysj\n错误类型:$myerr\n错误信息:$errinfo\n";#输出错误信息到runerr.txt中 } } close LOG; close ERRLOG;
脚本执行完毕后,打开runerr.txt,错误信息如下,一目了解:
--------
日期:2010-07-01
时间:09:16:50
事件:lisi login error
错误类型:系统错误
错误信息:用户不存在
--------
日期:2010-07-01
时间:13:19:10
事件:wangwu login error
错误类型:系统错误
错误信息:密码错误
--------
日期:2010-07-02
时间:09:31:32
事件:lisi save error
错误类型:SQL执行失败
错误信息:insert error
上一篇: 这下全村人都知道我有车
下一篇: 神奇的perl-第六个任务(12)