TEXTFSM模板匹配交换机CLI输出无结果问题求助
TEXTFSM模板匹配交换机CLI信息失败的排查与修复
原始交换机CLI输出
Status and Counters - General System Information System Name : Switch-Name-2 System Contact : System Location : MAC Age Time (sec) : 300 Time Zone : 0 Daylight Time Rule : None Software revision : WC.16.10.0009 Base MAC Addr : ******-****** ROM Version : WC.16.01.0008 Serial Number : ********** Up Time : 371 days Memory - Total : 339,329,536 CPU Util (%) : 9 Free : 217,292,368 IP Mgmt - Pkts Rx : 7,218,420 Packet - Total : 6600 Pkts Tx : 6,911,783 Buffers Free : 4281 Lowest : 4161 Missed : 0
用户编写的错误TEXTFSM模板
Value Uptime (\d+\s\S+) Value CPU (\d+) Value MemTotal (\S+) Value MemFree (\S+) Start ^${Uptime} ^\)\s+:\s${CPU} ^Memory\s+-\sTotal\s+:\s${MemTotal} ^\d+\s+Free\s+:\s+${MemFree} -> Record
问题排查
你的模板匹配失败的核心原因是规则完全没有对应CLI输出的行结构,具体问题点:
- Uptime匹配规则错误:CLI中Uptime的行是
Up Time : 371 days ...,你的规则^${Uptime}试图匹配行首直接是Uptime数值,完全偏离实际行格式。 - CPU匹配规则错误:CLI中CPU的行是
CPU Util (%) : 9 ...,你的规则^)\s+:\s${CPU}试图匹配行首的),和实际行结构无关。 - 内存字段的行位置错误:
Memory - Total和Up Time在同一行,Free(空闲内存)和CPU Util在同一行,你把它们当成独立行匹配,自然无法命中。 - Record触发逻辑错误:
-> Record的位置和规则不对应,且使用了HTML转义的->,应该直接用->。
修复后的TEXTFSM模板
Value Uptime (\d+\s\S+) Value CPU (\d+) Value MemTotal ([\d,]+) Value MemFree ([\d,]+) Start # 匹配Up Time和Memory Total所在的行 ^ Up Time\s+:\s+${Uptime}\s+Memory\s+-\sTotal\s+:\s+${MemTotal} # 匹配CPU Util和Free内存所在的行,匹配完成后触发Record ^ CPU Util \(%\)\s+:\s+${CPU}\s+Free\s+:\s+${MemFree} -> Record
模板说明
- 严格对应CLI输出的行前缀(包含开头的两个空格),确保匹配到正确的行。
- 针对同一行的多个字段,在一条规则里同时提取对应的值。
- 内存字段的正则用
[\d,]+,适配带逗号的数字格式(如339,329,536)。 - 在最后一个字段匹配完成后触发
-> Record,确保所有字段都被提取后生成结果。
内容的提问来源于stack exchange,提问作者Azureus Nation
相关产品推荐
相关产品推荐

