所以我试图使用expect来自动登录交换机并获取与mac地址相关联的接口,但每当我尝试使用正面的lookbehind正则表达式时,它就会出错。 以下是输入的内容:
VLAN ID MAC Address Interface IfIndex Status
------- ------------------ --------- ------- ------------
100 13:3N:K2:98:33:09 0/2 2 Static
100 52:0L:H9:74:6B:GG 0/8 8 Static
100 85:2F:E7:02:25:74 0/10 10 Static
以下是代码:
expect -c "
...
send \"show mac-addr-table\r\";
expect -re {(?<=85:2F:E7:02:25:74).*(0\/..)}
set output \$expect_out(buffer)
puts \"Result : \$output\"
"
这是我希望的输出:
Result : 0/10
可悲的是,每当我尝试这个时,我们都会遇到错误:
couldn't compile regular expression pattern: quantifier operand invalid
while executing
"expect -re {(?<=85:2F:E7:02:25:74).*(0\/..)}"
我还应该补充说试图逃跑?不输出任何东西。
答案 0 :(得分:1)
Tcl
(以及Expect
}不支持(?<=re)
语法(来自Perl
?)。你可以尝试这样:
expect -re {85:2F:E7:02:25:74.*(0/..)}
set output $expect_out(1,string)
这是来自expect
手册:
匹配模式(或eof或full_buffer)时,任何匹配和 以前不匹配的输出保存在变量中
expect_out(buffer)
。最多保存9个regexp子串匹配 在变量expect_out(1,string)
到expect_out(9,string)
。