- 论坛徽章:
- 0
|
文本内容:log1
2014-02-12T01:03:24.599Z cpu28:42479)NMP: nmp_ThrottleLogForDevice:2321: Cmd 0x85 (0x4130801e1940, 34849) to dev
"naa.600508b1001cc026e1ee67e9f99d273b" on path "vmhba0:C0:T0:L1" Failed: H:0x0 D:0x2 P:0x0 Valid sense data: 0x5 0x20 0x0. Act:NONE
2014-02-12T01:03:24.599Z cpu28:42479)ScsiDeviceIO: 2337: Cmd(0x4130801e1940) 0x85, CmdSN 0xf96 from world 34849 to dev
"naa.600508b1001cc026e1ee67e9f99d273b" failed H:0x0 D:0x2 P:0x0 Valid sense data: 0x5 0x20 0x0.
2014-02-12T01:03:24.610Z cpu31:52002)ScsiDeviceIO: 2337: Cmd(0x4130801e1940) 0x4d, CmdSN 0xf97 from world 34849 to dev
"naa.600508b1001cc026e1ee67e9f99d273b" failed H:0x0 D:0x2 P:0x0 Valid sense data: 0x5 0x20 0x0.
cat log1 | perl -ne 's/\r//g;print "$1 $2 $3 $4 $5 \n" if /(^.*?.*(Cmd.*?\)).*(naa\.\w+).*(vmhba.*?L).*(H:.*\.)/'
2014-02-12T01: Cmd 0x85 (0x4130801e1940, 34849) naa.600508b1001cc026e1ee67e9f99d273b vmhba0:C0:T0:L H:0x0 D:0x2 P:0x0 Valid sense data:
0x5 0x20 0x0.
需要匹配5个字段,其中包括vmhba的 记录,结果是输出第一行匹配后的内容,其他没有包含hba的记录都没有匹配成功。
cat log1 | perl -ne 's/\r//g;print "$1 $2 $3 $4 $5 \n" if /(^.*?.*(Cmd.*?\)).*(naa\.\w+).*(H:.*\.)/'
2014-02-12T01: Cmd 0x85 (0x4130801e1940, 34849) naa.600508b1001cc026e1ee67e9f99d273b H:0x0 D:0x2 P:0x0 Valid sense data: 0x5 0x20 0x0.
2014-02-12T01: Cmd(0x4130801e1940) naa.600508b1001cc026e1ee67e9f99d273b H:0x0 D:0x2 P:0x0 Valid sense data: 0x5 0x20 0x0.
2014-02-12T01: Cmd(0x4130801e1940) naa.600508b1001cc026e1ee67e9f99d273b H:0x0 D:0x2 P:0x0 Valid sense data: 0x5 0x20 0x0.
需要匹配4个字段,但是去掉了匹配vmhba的表达式,输出了所有记录。
cat log1 | perl -ne 's/\r//g;print "$1 $2 $3 $4 $5 \n" if /(^.*?.*(Cmd.*?\)).*(naa\.\w+).*((?:vmhba.*?L){0,1}).*(H:.*\.)/'
2014-02-12T01: Cmd 0x85 (0x4130801e1940, 34849) naa.600508b1001cc026e1ee67e9f99d273b H:0x0 D:0x2 P:0x0 Valid sense data: 0x5 0x20 0x0.
2014-02-12T01: Cmd(0x4130801e1940) naa.600508b1001cc026e1ee67e9f99d273b H:0x0 D:0x2 P:0x0 Valid sense data: 0x5 0x20 0x0.
2014-02-12T01: Cmd(0x4130801e1940) naa.600508b1001cc026e1ee67e9f99d273b H:0x0 D:0x2 P:0x0 Valid sense data: 0x5 0x20 0x0.
使用非捕获分组后对分组匹配一次,实际上和第一个一样,应该是匹配了0之后就结束了?
如果把{n,m}改成?号,实际上只按0次匹配,和{0,1}是一样的吧。。。
请问有没有什么办法让这个正则先匹配vmhba.*?L一次,如果成功那么返回改分组变量;如果没有匹配到vmhba.*?L,那么匹配0次。
这个好像是一个类似{1,0}的概念,但是n必须小于等于m。
除了用条件语句对记录分别进行处理,还有没有只用正则表达式解决的方法呢?
附加问题:$1 $2 $3..有没有哪个默认数组保存这几个记录的? |
|