在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 3125|回复: 4

[求助] 请问,perl如何简单高效实现查找多个关键词?

[复制链接]
发表于 2013-11-25 13:56:05 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
本帖最后由 oscillator_cn1 于 2013-11-25 14:06 编辑

各位:      正在学习使用perl写脚本,在过程中,遇到一个查找关键字的问题,嗯,具体情况如下:
      我需要写个脚本将某个文件(log文件)中带有一些关键字(比如error、waring,fatal等)的行找出来。但是所有的关键字并不是固定的,而是从外部输入的(因为要提高灵活性嘛)。比如有时只需要找带“error”的行,有时候需要找带“error”和“debug_ER”的行。因此,我们是打算将这些外部输入的关键字都存放到数组@keywords中,然后逐一比对。
      麻烦是:如果关键字是固定的,我可以直接“



  1. if ($line =~ /Error|warning|fatal/) {...}


复制代码
" 就行了,如果不固定,就成了:




  1. repeat($#keywords){
  2.     if($line =~ /$keywords[$i]/) {
  3.          . . .
  4.     }
  5.     $i++;
  6. }


复制代码


这样的话,我觉得效率比较低,能有什么办法简单高效实现查找不定个关键词的功能么?
发表于 2013-11-25 16:34:37 | 显示全部楼层
回复 1# oscillator_cn1


    感觉你不应该把查找放入到repeat循环中,而是先在repeat中把$line先处理好,再做相应的查找处理,其实和固定的差不多,只是多了一步将输入的拼凑成已知的。
 楼主| 发表于 2013-11-25 17:14:30 | 显示全部楼层
我在大括号中省略掉的处理其实是将$line push到一个数组中。没办法先处理再查找呀,而且同样绕不过查找不定个关键字这个坎啊。
发表于 2013-11-26 12:42:27 | 显示全部楼层
回复 3# oscillator_cn1


如果确定的key words:
   if ($line =~ /Error|warning|fatal/) {...}


可以改成
1-设定变量 $regexp="/Error|warning|fatal/"
2-查找   if ($line =~ $regexp) {...}
这种形式的话。


那么,对不确定个数的key words:
1-先由@keywords生成$regexp变量,似乎不难
2-查找   if ($line =~ $regexp) {...}
 楼主| 发表于 2013-11-26 19:04:55 | 显示全部楼层
回复 4# sjtusonic
Thanks ! 没有想到要把所有的关键字作为一个变量,我只想到循环单个处理的办法。茅塞顿开!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-12-18 20:59 , Processed in 0.020982 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表