我正在寻找一个匹配这两条线中的任何一条的正则表达式,并捕获/分组速度和双工的值。
speed: 1000Mbps (Duplex: full)
speed: n/a
第 1 行应具有值为“1000Mbps”的第 1 组和值为“满”的第 2 组。第 2 行只有第 1 组,值为“n/a”
这是我能得到的最接近的,试图在嵌套组中使用备用。它让我得到速度值,而不是双工值。
^\s+speed:\s+(\S+)\s*(|\(Duplex:\s+(\S+)\))
更长的版本
这是一个 TextFSM 模板。我将在此处包含这些详细信息,以防使用 FSM 有一种简单的方法可以完成上述操作。
样本数据:
== [onboard]
==[mgmt]
mode: static
ip: 1.2.3.4 255.255.255.248
ipv6: ::/0
status: up
speed: 1000Mbps (Duplex: full)
==[port1]
mode: static
ip: 0.0.0.0 0.0.0.0
ipv6: ::/0
status: down
speed: n/a
这是我正在使用的模板文件:
Value Required NAME (\S+)
Value MODE (\S+)
Value IP (\d+?\.\d+?\.\d+?\.\d+?)
Value NETMASK (\S+)
Value STATUS (\S+)
Value SPEED (\S+)
Value DUPLEX (\S+)
Start
^==\s+\[onboard\]
^\s+==\[${NAME}\]
^\s+mode:\s+${MODE}
^\s+ip:\s+${IP}\s+${NETMASK}
^\s+ipv6:\s+.*
^\s+status:\s+${STATUS}
^\s+speed:\s+${SPEED}\s+\(Duplex:\s+${DUPLEX}\) -> Record
^\s*$$
^. -> Error
我已经对上述内容进行了多次尝试,包括第二行以匹配没有“双工”的“速度”。尝试让两行都记录动作,或者只有一个,或者最后一个包罗万象。有没有办法在 FSM 中指定 OR 类型的语句?尝试匹配输入行,如果不匹配,试试那个?
编辑:感谢您的回复。但是,我无法获得在 TextFSM 中工作的任何示例。