免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3542 | 回复: 4
打印 上一主题 下一主题

【已解决】perl的匹配问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-03-10 14:45 |只看该作者 |倒序浏览
本帖最后由 andy20008 于 2014-03-10 15:38 编辑

我有一段内容要匹配,需求是这样的:
先要匹配到:backtrace,然后紧接着下面的几行还要匹配到:/system/lib/libhoudini.so,这才算匹配完成,然后我再执行处理。

具体要匹配的源文件内容如下,
  1. 02-18 15:29:32.741 I/DEBUG   (  143): backtrace:

  2. 02-18 15:29:32.741 I/DEBUG   (  143):     #00  pc 0016f113  /system/lib/libhoudini.so.3.3.9.44007

  3. 02-18 15:29:32.741 I/DEBUG   (  143):     #01  pc 000febf4  [stack:30512]

  4. 02-18 15:29:32.741 I/DEBUG   (  143):     #02  pc 00068527  /system/lib/libhoudini.so.3.3.9.44007

  5. 02-18 15:29:32.741 I/DEBUG   (  143):     #03  pc 0011f6f3  /system/lib/libhoudini.so.3.3.9.44007
复制代码
因为需求的要匹配的两个东东不是在同一行,使我犯难了。我该如何实现呢?谢谢!

【解决方法见5楼】

论坛徽章:
8
技术图书徽章
日期:2013-09-30 08:51:28技术图书徽章
日期:2013-12-11 09:26:39白羊座
日期:2013-12-27 15:27:13金牛座
日期:2014-01-06 09:13:05天蝎座
日期:2014-01-21 14:23:28酉鸡
日期:2014-05-09 16:51:12卯兔
日期:2014-08-11 16:49:1515-16赛季CBA联赛之八一
日期:2017-08-14 23:24:57
2 [报告]
发表于 2014-03-10 14:55 |只看该作者
用$.这个东东控制一下就好了哦

论坛徽章:
0
3 [报告]
发表于 2014-03-10 15:09 |只看该作者
本帖最后由 andy20008 于 2014-03-10 15:11 编辑

回复 2# xiumu2280

能否给一下代码?谢谢!

用 $. 好像不行,每两行中间是有空行的。
   

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
4 [报告]
发表于 2014-03-10 15:22 |只看该作者
回复 1# andy20008

keep the result to a variable( ex: $last)

# cat keep_last.pl
use strict;
use warnings;

my $last = 0;
while(<DATA>){
  chomp;
  next if(m/^\s*$/);
  if($last == 1 and m(/system/lib/libhoudini\.so)){
    print "match: $_\n";
  }
  if(m/backtrace:/){
    $last = 1;
  }
  else{
    $last = 0;
  }

}


__DATA__
02-18 15:29:32.741 I/DEBUG   (  143): backtrace:

02-18 15:29:32.741 I/DEBUG   (  143):     #00  pc 0016f113  /system/lib/libhoudini.so.3.3.9.44007

02-18 15:29:32.741 I/DEBUG   (  143):     #01  pc 000febf4  [stack:30512]

02-18 15:29:32.741 I/DEBUG   (  143):     #02  pc 00068527  /system/lib/libhoudini.so.3.3.9.44007

02-18 15:29:32.741 I/DEBUG   (  143):     #03  pc 0011f6f3  /system/lib/libhoudini.so.3.3.9.44007

   

论坛徽章:
0
5 [报告]
发表于 2014-03-10 15:34 |只看该作者
本帖最后由 andy20008 于 2014-03-10 15:35 编辑

回复 4# jason680

谢谢回复。你的我试了一下,只能匹配到一行:/system/lib/libhoudini\.so,后面的还有这样的内容就匹配不到了。


不过,我自己已经实现了:
通过两个变量用来记录行号的,第一个用来记录匹配到:“backtrace”的,第二个用来记录匹配到:“/system/lib/libhoudini.so”的,
通过后面的变量减去前面的变量,其值在某个数字范围内就OK了。

感觉这个办法比较笨,不过还是实现了我的需求。呵呵。

   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP