TextFSM重复正则值提取失败及ip命令输出解析求助
解决TextFSM重复匹配与
ip -s -s link show解析问题 一、简单示例的错误原因与修正
错误根源
你的TextFSM模板存在两个核心问题:
- 规则匹配顺序问题:TextFSM对每一行按顺序检查规则,匹配到第一条后立即停止,不会执行后续规则。第二行
3 4同时符合^${FIRST} ${SECOND}和^${THIRD} ${FORTH},但第一条规则先匹配,导致FIRST/SECOND被覆盖为3/4,第二条规则完全没机会触发。 - Record时机错误:第一行匹配后未触发状态转移或Record,第二行的覆盖值被最终记录,导致预期的
THIRD/FORTH为空。
修正后的模板
若要将两行数据合并为一个Record,需用状态转移确保匹配顺序:
Value FIRST (\d+) Value SECOND (\d+) Value THIRD (\d+) Value FORTH (\d+) Start ^${FIRST} ${SECOND} -> NextState NextState ^${THIRD} ${FORTH} -> Record
修正逻辑:第一行匹配后进入NextState,第二行只能匹配NextState下的规则,赋值THIRD/FORTH后触发Record,输出符合预期:
[ { "FIRST": "1", "SECOND": "2", "THIRD": "3", "FORTH": "4" } ]
二、实际场景:解析ip -s -s link show的TextFSM模板
针对无法提取TX/RX统计值的问题,根据输出结构设计如下模板:
最终模板
Value INTERFACE (\S+) Value RX_BYTES (\d+) Value RX_PACKETS (\d+) Value RX_ERRORS (\d+) Value RX_DROPPED (\d+) Value RX_OVERRUN (\d+) Value RX_MCAST (\d+) Value TX_BYTES (\d+) Value TX_PACKETS (\d+) Value TX_ERRORS (\d+) Value TX_DROPPED (\d+) Value TX_CARRIER (\d+) Value TX_COLLSNS (\d+) Start ^\d+: ${INTERFACE}@?.* -> RX_State RX_State ^\s*RX: bytes packets errors dropped overrun mcast -> RX_Values ^.* -> Continue # 跳过无关行(如MAC地址行) RX_Values ^\s*${RX_BYTES}\s+${RX_PACKETS}\s+${RX_ERRORS}\s+${RX_DROPPED}\s+${RX_OVERRUN}\s+${RX_MCAST} -> TX_State ^.* -> Continue # 跳过RX错误统计行 TX_State ^\s*TX: bytes packets errors dropped carrier collsns -> TX_Values ^.* -> Continue # 跳过中间无关行 TX_Values ^\s*${TX_BYTES}\s+${TX_PACKETS}\s+${TX_ERRORS}\s+${TX_DROPPED}\s+${TX_CARRIER}\s+${TX_COLLSNS} -> Record ^.* -> Continue # 跳过TX错误统计行
模板核心逻辑
- 状态转移:通过
Start → RX_State → RX_Values → TX_State → TX_Values的顺序,严格匹配接口信息→RX表头→RX数值→TX表头→TX数值的输出结构。 - 跳过无关行:用
Continue动作忽略MAC地址、错误统计等不需要的行。 - 精准匹配:所有数值用
(\d+)提取,接口名用(\S+)匹配非空白字符,确保数据准确。
测试输出
针对你提供的输入,输出结果如下:
[ { "INTERFACE": "eth0@if15", "RX_BYTES": "567635797", "RX_PACKETS": "6154603", "RX_ERRORS": "0", "RX_DROPPED": "18089", "RX_OVERRUN": "0", "RX_MCAST": "0", "TX_BYTES": "41624009", "TX_PACKETS": "340091", "TX_ERRORS": "0", "TX_DROPPED": "0", "TX_CARRIER": "0", "TX_COLLSNS": "0" } ]
内容的提问来源于stack exchange,提问作者netnem
相关产品推荐
相关产品推荐

