如何通过TCL中的regexp将有用信息过滤到特殊变量?

时间:2015-12-21 14:33:56

标签: regex tcl

我从路由器跟踪日志:

LC/0/0/CPU0:Dec 13 20:34:10.487 : netio[262]: %PKT_INFRA-PQMON-6-QUEUE_DROP : Taildrop on XIPC queue 2 owned by arp (jid=126) 
LC/0/2/CPU0:Dec 13 20:34:13.272 : netio[262]: %PKT_INFRA-PQMON-6-QUEUE_DROP : Taildrop on XIPC queue 2 owned by arp (jid=216) 
LC/0/1/CPU0:Dec 13 20:34:15.721 : netio[262]: %PKT_INFRA-PQMON-6-QUEUE_DROP : Taildrop on XIPC queue 2 owned by arp (jid=117) 

我们可以检查第一行,例如,我想使用TCL过滤0/0 / CPU0到$ a; 126到$ b。由于这些信息应该是可变的,因此无法通过字符串过滤,例如第2行,更改为0/2 / CPU0和216.

我只需要TCL来聚焦一行,对于所有行,我可以使用循环语句结构来检查每一行是否被同一个TCL。

需要你的帮助!

% set x {LC/0/0/CPU0:Dec 13 20:34:10.487 : netio[262]: %PKT_INFRA-PQMON-6-QUEUE_DROP : Taildrop on XIPC queue 2 owned by arp (jid=126)}
LC/0/0/CPU0:Dec 13 20:34:10.487 : netio[262]: %PKT_INFRA-PQMON-6-QUEUE_DROP : Taildrop on XIPC queue 2 owned by arp (jid=126)
% 
% set x
LC/0/0/CPU0:Dec 13 20:34:10.487 : netio[262]: %PKT_INFRA-PQMON-6-QUEUE_DROP : Taildrop on XIPC queue 2 owned by arp (jid=126)
% 
% regexp ?

1 个答案:

答案 0 :(得分:1)

与我的朋友DaPeng讨论后提供了答案:

% set x {LC/0/0/CPU0:Dec 13 20:34:10.487 : netio[262]: %PKT_INFRA-PQMON-6-QUEUE_DROP : Taildrop on XIPC queue 2 owned by arp (jid=116)}
LC/0/0/CPU0:Dec 13 20:34:10.487 : netio[262]: %PKT_INFRA-PQMON-6-QUEUE_DROP : Taildrop on XIPC queue 2 owned by arp (jid=116)
%      
% 
% regexp {LC/([0-9]/[0-9]/CPU[0-9]).*\(jid=([0-9]+)\)} $x all location jid
1
% set all
% 
LC/0/0/CPU0:Dec 13 20:34:10.487 : netio[262]: %PKT_INFRA-PQMON-6-QUEUE_DROP : Taildrop on XIPC queue 2 owned by arp (jid=116)
% 
% set location
0/0/CPU0
% 
% set jid
116