如何用TextFSM匹配多列中含跨行内容的vPC输出文本
解决TextFSM匹配vPC输出中多列跨行内容的问题
针对你的vPC状态输出中Consistency、Reason和Active vlans字段存在跨行的情况,以下是调整后的TextFSM模板,可正确捕获所有跨行内容:
Value id (\d+) Value port (\S+) Value status (\S+) Value Append consistency (\S+(?:\s+\S+)*) Value Append reason (.+) Value Append active_vlans ([\d,\-\s]+) Start ^\s*Id\s*Port\s*Status\s*Consistency\s*Reason\s*Active\s*vlans -> BeginCapture BeginCapture ^${id}\s+${port}\s+${status}\s+${consistency}\s+${reason}\s+${active_vlans} -> InEntry ^\s*$ -> Start InEntry ^${id}\s+${port}\s+${status}\s+${consistency}\s+${reason}\s+${active_vlans} -> Record, BeginCapture ^\s+${consistency}\s+${reason} -> Continue ^\s+${reason} -> Continue ^\s+${active_vlans} -> Continue ^\s*$ -> Record, Start
关键调整说明:
字段定义优化:
- 改用
Append修饰符处理Consistency、Reason和Active vlans字段,确保跨行内容被追加到同一字段值中,而非作为多个独立值。 - 调整正则表达式适配实际内容格式:
consistency:捕获空格分隔的单词(如"Not Applicable")reason:捕获任意文本内容,支持多行拼接active_vlans:捕获包含数字、逗号、连字符和空格的VLAN列表
- 改用
状态逻辑优化:
BeginCapture状态专门处理vPC条目首行的捕获InEntry状态处理当前条目的跨行内容:- 匹配同时包含Consistency和Reason续行的场景(如条目7的第二行)
- 匹配仅包含Reason续行的场景(如条目19的后续行)
- 匹配仅包含Active vlans续行的场景(如条目5的第二行)
- 遇到新条目或空行时自动记录当前条目并重置状态,确保每个vPC条目被正确分隔
效果验证:
- 条目7的Consistency字段会被捕获为
Not Applicable,Reason字段为Consistency Check Not Performed - 条目19的Reason字段会完整拼接所有跨行文本
- 条目5的Active vlans字段会合并为
2002,2121, 1000
后续可根据需要对捕获结果进行简单的空格清理,但核心的跨行匹配逻辑已解决。
内容的提问来源于stack exchange,提问作者Amankumar Singh
相关产品推荐
相关产品推荐

