神奇的Perl-正则表达式(3)

本文介绍Perl中特殊字符的匹配方法,并通过实例演示如何使用Perl脚本筛选日志文件中的错误记录,提取关键信息并输出到新文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

声明:本神奇的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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值