Regex TCL正则表达式问题-查找路由器父接口
我正在做一些Expect/TCL脚本来从路由器获取重要信息 我的目标之一是使用我登录到路由器的IP作为参考,获取路由器的WAN接口的名称 路由器IP示例:66.66.66.66-包含在变量$rtrname中 使用expect,我使用以下表达式计算以下数据($expect_out(buffer)),并将其输出到值$wan 表达方式:Regex TCL正则表达式问题-查找路由器父接口,regex,networking,tcl,expect,Regex,Networking,Tcl,Expect,我正在做一些Expect/TCL脚本来从路由器获取重要信息 我的目标之一是使用我登录到路由器的IP作为参考,获取路由器的WAN接口的名称 路由器IP示例:66.66.66.66-包含在变量$rtrname中 使用expect,我使用以下表达式计算以下数据($expect_out(buffer)),并将其输出到值$wan 表达方式: regexp (.*?)(?=(?:\..*?)?\s{2,}$rtrname) $expect_out(buffer) wan $expect\u out(缓冲区
regexp (.*?)(?=(?:\..*?)?\s{2,}$rtrname) $expect_out(buffer) wan
$expect\u out(缓冲区):
如果$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
这导致$wan返回为空,而我期望的是'fr 1'
我使用了一些不同的正则表达式工具,这个表达式似乎通过了。只是当我把它放在代码中时,它不会。我错过了什么
PS-我是一名网络工程师,不是一名专业的编码员,所以请对我放松点!:) 你确定你得到的是
千兆以太网0/0
?因为正则表达式是错误的,应该是:
regexp -line -- ^(.*?)(?=(?:\\..*?)?\\s{2,}$rtrname) $expect_out(buffer) wan
^ ^
-line
标志用于使^
匹配一行的开头,而不是整个字符串
由于没有将表达式用大括号括起来,因此必须加倍避开反斜杠
正则表达式在其他输出上也适用于我。你确定你得到的是
GigabitEthernet0/0
?因为正则表达式是错误的,应该是:
regexp -line -- ^(.*?)(?=(?:\\..*?)?\\s{2,}$rtrname) $expect_out(buffer) wan
^ ^
-line
标志用于使^
匹配一行的开头,而不是整个字符串
由于没有将表达式用大括号括起来,因此必须加倍避开反斜杠
regex在其他输出上也适用于我。Jerry,谢谢你看这个。我确实似乎赶上了吉比特以太网0/0之前的回车;我会试试你的建议,看看它是否解决了我的问题。好的:)哦,还有一件事,你也可以在
*?
周围放上括号,因为你根本不访问捕获的部分。明白了!它正在工作。它在fr 1之前占据了空间(这似乎没有进入我上面的示例),但是路由器并不关心,因此,我也不关心:)@Eleck Haha,我很高兴:)Jerry,谢谢你看这个。我确实似乎赶上了吉比特以太网0/0之前的回车;我会试试你的建议,看看它是否解决了我的问题。好的:)哦,还有一件事,你也可以在*?
周围放上括号,因为你根本不访问捕获的部分。明白了!它正在工作。它在fr 1之前占据了空间(这似乎没有进入我上面的示例),但路由器并不在意,因此,我也不在乎:)@Eleck Haha,我很高兴:)