【TCL语言-正则表达式--字符串匹配--实例详解】
用处:正则表达式用来获取回显中想要的字段或某些字段的个数
回显实例
optionalSwitches
一:获取回显中匹配项字段
正则表达式语法
regexp ?optionalSwitches ? patterns ?searchString ?fullMatch subMatch1 ... subMatchn
“-line” :开启行敏感
set buf ["show board-info" -r] ### 正则匹配主框 即 MPU(M)所在机框,并输出主框号:0或1 实例回显中则为0 regexp -line { MPU(M)s+S+s+(d)} $buf master_mpu_shelf master_shelf puts master_mpu_shelf:$master_mpu_shelf puts master_shelf:$master_shelf 输出结果: master_mpu_shelf:MPU(M) 9900MPUCII 0 master_shelf:0 ### 正则匹配备框主主控 即 MPU(M),并输出主主控:T1或T2 实例回显中则为T1 regexp -line { MPU(M)s+S+s+Ss+(Sd)} $buf master_mpu_Tn master_panel puts master_mpu_Tn:$master_mpu_Tn puts master_panel:$master_panel 输出结果: master_mpu_Tn:MPU(M) 9900MPUCII 0 T1 master_panel:T1
回显
### 正则匹配备框即 MPU(S)所在机框,并输出主框号:0或1 实例回显中则为1 regexp -line { MPU(S)s+S+s+(d)} $buf slave_mpu_shelf slave_shelf puts slave_mpu_shelf:$slave_mpu_shelf puts slave_shelf:$slave_shelf 输出结果: slave_mpu_shelf:MPU(S) 9900MPUCII 1 slave_shelf:1 ### 正则匹配备框备主控即 MPU(S),并输出主主控:T1或T2 实例回显中则为T2 regexp -line { MPU(S)s+S+s+Ss+(Sd)} $buf slave_mpu_Tn slave_panel puts slave_mpu_Tn:$slave_mpu_Tn puts slave_panel:$slave_panel 输出结果: slave_mpu_Tn:MPU(S) 9900MPUCII 1 T1 slave_panel:T1
二:获取回显中匹配项字段的个数
“-all” :使正则表达式在回显字符串中尽可能多的匹配,返回找到匹配项的总数
set buf ["show board-info" -r] set show_board_on_num [regexp -all { on } $buffer] ;#返回on的总个数,{ on } on的两边一定要带空格,否则会匹配到Online/Onshelf等中的on puts show_board_on_num:$show_board_on_num show_board_on_num:48
三:获取回显中匹配项字段列表
“ -all -inline” 共用,将每次匹配字段追加到列表中,输出结果是列表
set buf [ "show board-info" -t 1000 -r] set MPU [regexp -all -inline { 8800MPU+S+} $buf] set SFU [regexp -all -inline { 88+w+SFU+S+} $buf] set PFU [regexp -all -inline { 8800+w?w?IPM+w+} $buf] set IPM [regexp -all -inline { 8800(?!MPU.)(?!IPM.)w+} $buf] puts MPU:$MPU puts SFU:$SFU puts PFU:$PFU puts IPM:$IPM 输出结果 MPU:8800MPUCII 8800MPUCII 8800MPUCII 8800MPUCII SFU:8808SFUC(V1.1) 8808SFUC(V1.1) 8808SFUC(V1.1) 8808SFUC(V1.1) 8808SFUC(V1.1) 8808SFUC(V1.1) 8808SFUC(V1.1) 8808SFUC(V1.1) PFU:8800LQ36E2A 8800LQ36E2A 8800LQ36E2A 8800XF48E2A 8800XF48E2A 8800UQ36E2A 8800UQ36E2A 8800LQ36E2AU18 8800LQ36E2AU18 IPM:8800IPMC 8800IPMC