期待 - 正则表达式正面观察

时间:2015-04-22 03:52:30

标签: expect

所以我试图使用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\/..)}"

我还应该补充说试图逃跑?不输出任何东西。

1 个答案:

答案 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)