1

我正在编写一些 Expect / TCL 脚本以从路由器中获取重要信息。

我的目标之一是使用我登录路由器的 IP 作为参考来获取路由器 WAN 接口的名称。

示例路由器 IP:66.66.66.66 - 这包含在变量 $rtrname 中。

使用期望,我使用以下表达式评估以下数据 ($expect_out(buffer)),并将其输出到值 $wan...

表达:

regexp (.*?)(?=(?:\..*?)?\s{2,}$rtrname) $expect_out(buffer) wan

$expect_out(缓冲区):

Router1#sh ip int brief
Interface                  IP-Address      OK? Method Status                Protocol
Embedded-Service-Engine0/0 unassigned      YES NVRAM  administratively down down    
GigabitEthernet0/0         unassigned      YES NVRAM  up                    up      
GigabitEthernet0/0.10      55.55.55.55  YES NVRAM  up                    up      
GigabitEthernet0/0.20      66.66.66.66  YES NVRAM  up                    up      
GigabitEthernet0/1         77.77.77.77   YES NVRAM  up                    up      
GigabitEthernet0/2         192.168.1.1   YES NVRAM  up                    up   

使用 $rtrname == 66.66.66.66 这将 $wan 作为 GigabitEthernet0/0 正确返回,这就是我想要的。

不幸的是,它不能与这样的输出正常工作:

Router2#sh ip int brief
Interface               IP Address          Status      Protocol
eth 0/1                192.168.1.1            UP          UP         
eth 0/2                77.77.77.77       UP          UP         
fr 1.501               55.55.55.55       UP          UP         
fr 1.502               66.66.66.66       UP          UP     

当我期待“fr 1”时,这导致 $wan 什么都没有回来。

我使用了一些不同的正则表达式工具,表达式似乎通过了。只是当我将它放入代码中时它没有。我错过了什么?

PS - 我是一名网络工程师,而不是专业的编码员,所以请放轻松!:)

4

1 回答 1

1

你确定你得到了GigabitEthernet0/0吗?因为正则表达式是错误的,应该是:

regexp -line -- ^(.*?)(?=(?:\\..*?)?\\s{2,}$rtrname) $expect_out(buffer) wan
                            ^       ^

-line标志是为了^匹配一行的开头而不是整个字符串。

由于您没有将表达式包装在大括号中,因此您必须双重转义反斜杠。

正则表达式也适用于其他输出。

于 2013-09-19T19:54:20.923 回答