【问题标题】:Regexp to match string on TCL正则表达式匹配 TCL 中的字符串
【发布时间】:2017-11-09 16:05:50
【问题描述】:
接口 IP 地址正常吗?方法状态协议

GigabitEthernet0/0/0 未分配 YES NVRAM up up
Gi0/0/0.201 10.10.10.30 是 NVRAM 向上
GigabitEthernet0/1 未分配 YES NVRAM admin down down
GigabitEthernet0/1.201 unassigned YES manual admin down down
GigabitEthernet0/2/0 1.2.3.4 YES NVRAM up up
GigabitEthernet0/2/0.203 10.10.10.1 YES NVRAM up up 

这是路由器上命令的一些输出。我希望能够匹配以GiGigabitEthernet 开头并以.20(1-20) 结尾的字符串,例如.201.202.203 直到.220

所以它将匹配GigabitEthernet0/1.201Gi0/0/0.201

一旦匹配,我希望能够将完整的字符串放入变量中并在其他地方使用它。如果有多个匹配项,我希望它们包含多个变量。

请编码人员帮助我。您的帮助将不胜感激。提前致谢。

【问题讨论】:

标签: regex tcl string-matching


【解决方案1】:
set text {Interface                  IP-Address      OK? Method Status           Protocol

GigabitEthernet0/0/0        unassigned      YES NVRAM  up                    up
Gi0/0/0.201                 10.10.10.30     YES NVRAM  up                    up
GigabitEthernet0/1          unassigned      YES NVRAM  admin down           down
GigabitEthernet0/1.201       unassigned     YES manual admin down           down
GigabitEthernet0/2/0        1.2.3.4         YES NVRAM  up                    up
GigabitEthernet0/2/0.203    10.10.10.1      YES NVRAM  up                    up }

set interfaces [regexp -all -inline {\mGi\S+\.2(?:0[1-9]|1[0-9]|20)\M} $text]
puts $interfaces
Gi0/0/0.201 GigabitEthernet0/1.201 GigabitEthernet0/2/0.203

https://tcl.tk/man/tcl8.6/TclCmd/re_syntax.htmhttps://tcl.tk/man/tcl8.6/TclCmd/regexp.htm

【讨论】:

  • 我添加了单词边界\m \M 这样你就不会匹配像“xxxGi0.2012345”这样的东西
  • 谢谢格伦。你这么说真是太棒了。同时,我一直在尝试并提出 (Gi.+)(\/[0-2])([./]?)([2][0-2][1-9]) 。它给了我匹配,但我喜欢只有 1 个子字符串中的数字。再次感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-24
  • 1970-01-01
  • 2012-06-05
  • 2013-12-25
相关资源
最近更新 更多