Chinaunix

标题: perl能完成这个搜索的功能吗? [打印本页]

作者: zljjg2000    时间: 2006-08-25 10:08
标题: perl能完成这个搜索的功能吗?
例如:文件file

Port 1:2
Name               VID  Protocol Addr        Flags        Proto   Ports

xianfu-new         151  221.0.2.41     /30 ------f------- ANY     1/1  
p-cq-quzhengfu-ep0 2579 ------------------ --------       ANY     2/2  
p-cq-quzhengfu-ep0 2578 ------------------ --------       ANY     2/2  
p-cq-quzhengfu-ep0 2577 ------------------ --------       ANY     2/2  
p-cq-quzhengfu-ep0 2576 ------------------ --------       ANY     3/3  
p-cq-quzhengfu-ep0 2575 ------------------ --------       ANY     3/3  
p-cq-quzhengfu-ep0 2574 ------------------ --------       ANY     3/3  


Flags: (C) Domain-masterVlan, (c) Domain-memberVlan, (d) DVMRP Enabled
       (E) ESRP Slave, (f) IP Forwarding Enabled, (G) GVRP Enabled
       (i) ISIS Enabled, (I) IP Forwarding lpm-routing Enabled
       (L) Loopback Enabled, (M) ESRP Master, (m) IPmc Forwarding Enabled
       (N) GNS Reply Enabled, (o) OSPF Enabled, (P) IPX SAP Enabled
       (p) PIM Enabled, (R) SubVLAN IP Range Configured, (r) RIP Enabled
       (S) SuperVlan, (s) SubVlan, (T) Member of STP Domain
能够将"Name"和“Flags:”之间的内容提取出来吗?可以用什么样的规则表达式呢?
谢谢。
作者: HonestQiao    时间: 2006-08-25 11:13
有规则就可以提取的。

首先用空格分割,然后不久可以提取了么?
作者: zljjg2000    时间: 2006-08-25 13:32
可以根据names和 flags这两个关键字进行模式匹配吗?
作者: HonestQiao    时间: 2006-08-25 14:02
这个似乎不行吧。

name和下面的内容,除了空格分割之后位置对等,没有其他的什么联系了。
作者: zljjg2000    时间: 2006-08-25 15:22
好像规则表达式可以定义从第几行开始,到第几行结束,然后将其中的内容取出,
就是不知道能不能将行号换成字符串进行匹配查找。
作者: apile    时间: 2006-08-25 15:39
其实用简单的作法..比较容易看得懂自己在写什麽.....
可以设定一个$flag当他匹配names与flags时,就设定为1..
然後接下来只需要判断$flag ==1,在去作分析即可...
因为即便你数据抓出来..还是需要进行分析....
作者: ulmer    时间: 2006-08-25 21:26
原帖由 zljjg2000 于 2006-8-25 10:08 发表
例如:文件file

Port 1:2
Name               VID  Protocol Addr        Flags        Proto   Ports

xianfu-new         151  221.0.2.41     /30 ------f------- ANY     1/1  
p-cq-quzhengfu-ep0 25 ...
能够将"Name"和“Flags:”之间的内容提取出来吗?可以用什么样的规则表达式呢?


hi.

yes!

TIPS:
before doing that, you should analyse your data structure, which fixed rule you
can get?
I see. there are 6 fields (or columns) in the records' header:
(NAME, VID, PROTOCAL_ADDR, FLAGS, PROTO, PORTS)
In first 2 fields (NAME, VID) and last 2 fields (PROTO, PORTS) there are fixed format,
but between  PROTOCAL_ADDR and FLAGS there is no clear rules, therefor using
split /\s+/, .. will not match your correct request.
But you can use regex to match it per line.

Best regards,
    ulmer

-------------
Schoenes Wochenende!
作者: zljjg2000    时间: 2006-08-26 11:31
已经可以了,通过apile大侠的方法,设置标志位,可以实现,谢谢大家指教!




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2