2015-12-21 59 views
-1

我已經跟隨記錄從路由器:如何通過TCL中的regexp過濾有用的信息到特殊變量?

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篩選到$一個; 126至$ b。由於這些信息應該變量,所以不能過濾字符串,例如第二行,更改爲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

和我的朋友大鵬誰提供答案討論後:

% 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 
+0

這是對正確的 - 這是絕對正確的工具 - 但我會用錨固('^'在RE開始和'$'在RE結束時)和'\ d'而不是'[0-9]'。我也會認真考慮是否有任何一個數字匹配的地方應該匹配多個數字。這取決於可能的價值觀的全部範圍,你可能比我們理解得更好...... –

+0

不,我是更新的正則表達式...如果你有好主意,你能不能粘貼到這裏〜這將幫助更多的人~~爲了檢查如何爲正則表達式工作,我選中了「regexp {LC /([0-9]/[0-9]/CPU [0-9])。* jid =([0-9] [0-9 ] [0-9])。*} $ x all lo jid「也適用。 – frank

+0

Donal建議'regexp {^ LC /(\ d +/\ d +/CPU \ d)。* \(jid =(\ d +)\)$} $ x all location jid' - 參見http:// www。 tcl.tk/man/tcl8.6/TclCmd/re_syntax.htm –