3

查询 cisco 路由器以从分支集线器路由器中提取“show dmvpn”输出的脚本。然而,我们升级了集线器路由器,新的 IOS 现在显示“show dmvpn”命令的日期/时间信息。以前的 IOS 版本仅显示“从不”,并且在使用脚本时仅由于 (\S+) 而为较新的 IOS 路由器引发错误。

我试图阅读正则表达式,但无法弄清楚如何加入 [3x] 单词/日期/时间。

在职的:

if(pregmatch("/^\s+\d+\s+(\d+\.\d+\.\d+\.\d+)\s+(\d+\.\d+\.\d+\.\d+)\s+(\S+)\s+(\S+)\s+(\S+)/",$line,$hit))


#show dmvpn
 # Ent  Peer NBMA Addr Peer Tunnel Add State  UpDn Tm Attrb
 ----- --------------- --------------- ----- -------- -----
     1   192.168.1.1     42.10.10.10    UP    **never**    DN
     1   192.168.1.1     42.10.10.10    UP    **never**    DN
     1   192.168.1.1     42.10.10.10    UP    **never**    DN

不工作:正则表达式在较新的 IOS 上失败,实际上显示了上行/下行隧道计时器的日期/时间:

#show dmvpn
 # Ent  Peer NBMA Addr Peer Tunnel Add State  UpDn Tm Attrb
 ----- --------------- --------------- ----- -------- -----
     1     192.168.1.1     42.10.10.10    UP **08:59:16**    DN
     1     192.168.1.1     42.10.10.10    UP **04:11:24**    DN
     1     192.168.1.1     42.10.10.10    UP    **2d13h**    DN
     1     192.168.1.1     42.10.10.10    UP     **3w0d**    DN
     1     192.168.1.1     42.10.10.10    UP    **5d00h**    DN

我假设我需要在代码中的倒数第二个 (\S+) 旁边添加 (\d+:\d+:\d+) 但不确定如何加入它们,并在其中包含 3w0d 和 5d00h .

这似乎是一个简单的正则表达式修复,但目前超出了我的编码范围。我也试图寻找答案,但每个人都在使用不同的术语来表示“正则表达式”和“正则表达式”

4

1 回答 1

0

如果您处于隧道模式,则您的正则表达式仅假设匹配行:$tunnel_int = TRUE 但是您给我们的代码示例不包含以“隧道”开头的字符串,因此您没有以隧道模式传递,因此您永远不会尝试匹配正则表达式。这就是为什么即使正则表达式是正确的,脚本也不起作用。

您的问题是算法问题,而不是正则表达式问题。但是由于我们不知道您要做什么以及您要测试什么,因此很难提供帮助。

如果您没有开发人员技能来维护它,也许您应该获得自由开发人员的帮助,以帮助您了解您的需求并调整代码。

如果您有更具体的信息,那么您可以就某个主题寻求更准确的帮助。

祝你项目好运。

于 2013-08-12T12:24:18.667 回答