You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Google TextFSM解析NXOS「show ip community-list」输出失败求助

问题分析与解决方案

我看了你的TextFSM模板和设备输出,问题主要出在几个匹配细节上,咱们一步步来修正:

核心问题点

  1. TYPE匹配不匹配:你的模板里写的是(Standard|Extended),但设备输出里用的是Expanded而非Extended,这直接导致第一行完全匹配失败。
  2. CLNAME正则逻辑错误:(\D+)仅匹配非数字字符,但你的列表名称ROUTES_CL1包含数字,这个正则会只截取到ROUTES_CL,漏掉后面的数字部分。
  3. 未处理带引号的社区值:设备输出里存在带双引号的条目(比如"11111:10000"),你的正则没有处理引号,会导致ASNUM和TAGNUM匹配失败。
  4. 状态流转未覆盖行结构差异:有的社区列表表头和条目在同一行(比如Expanded那行),有的是表头单独一行后接多行条目,你的模板没覆盖这种同一行的场景。

修正后的TextFSM模板

Value TYPE (Standard|Expanded)
Value CLNAME (\S+)
Value SEQ (\d+)
Value ACTION (permit|deny)
Value ASNUM (\d+)
Value TAGNUM (\d+)

Start
  ^${TYPE}\s+Community\s+List\s+${CLNAME}\s+${SEQ}\s+${ACTION}\s+"?${ASNUM}:${TAGNUM}"?\s* -> Record
  ^${TYPE}\s+Community\s+List\s+${CLNAME}\s* -> CommunitySection

CommunitySection
  ^\s+${SEQ}\s+${ACTION}\s+"?${ASNUM}:${TAGNUM}"?\s* -> Record

修正说明

  • TYPE正则调整:把Extended替换为Expanded,和设备输出的术语保持一致。
  • CLNAME正则优化:改成(\S+),匹配所有非空格字符,完美兼容带数字的列表名称。
  • 引号兼容处理:在ASNUM:TAGNUM前后添加"?,表示可选的双引号,不管条目带不带引号都能正常匹配。
  • 状态流转优化:
    • 第一个规则直接匹配表头和条目在同一行的情况,匹配后直接记录结果。
    • 第二个规则匹配仅含表头的行,切换到CommunitySection状态处理后续条目。
    • CommunitySection状态专门处理换行后的独立条目,匹配后记录结果。

测试效果

用这个模板解析你的设备输出,会得到以下结构化结果:

[
    {'TYPE': 'Expanded', 'CLNAME': 'ROUTES_CL1', 'SEQ': '1', 'ACTION': 'permit', 'ASNUM': '11111', 'TAGNUM': '10000'},
    {'TYPE': 'Standard', 'CLNAME': 'ROUTES_CL2', 'SEQ': '1', 'ACTION': 'permit', 'ASNUM': '11111', 'TAGNUM': '10000'},
    {'TYPE': 'Standard', 'CLNAME': 'ROUTES_CL2', 'SEQ': '2', 'ACTION': 'permit', 'ASNUM': '22222', 'TAGNUM': '10000'},
    {'TYPE': 'Standard', 'CLNAME': 'ROUTES_CL2', 'SEQ': '3', 'ACTION': 'permit', 'ASNUM': '33333', 'TAGNUM': '10000'}
]

内容的提问来源于stack exchange,提问作者netkool

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:38:39