【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
