我需要解析此原始数据以进行处理:
Port Align-Err FCS-Err Xmit-Err Rcv-Err UnderSize OutDiscards
Gi0/1 1 2 3 4 5 6
Gi0/2 11 12 13 14 15 16
Port Single-Col Multi-Col Late-Col Excess-Col Carri-Sen Runts Giants
Gi0/1 1 2 3 4 5 6 7
Gi0/2 111 122 133 144 155 166 177
为此,我使用TextFSM
我想要这个输出:
['Gi0/1', '1', '2', '3', '4', '5', '6', '1', '2', '3', '4', '5', '6', '7']
['Gi0/2', '11', '12', '13', '14', '15', '16', '111', '112', '113', '114', '115', '116', '117']
我写的第一个模板是:
Value PORT (\S+(/\d+)?)
Value ALIGNERR (\d+)
Value FCSERR (\d+)
Value XMITERR (\d+)
Value RCVERR (\d+)
Value UNDERSIZE (\d+)
Value OUTDISCARDS (\d+)
Value SINGLECOL (\d+)
Value MULTICOL (\d+)
Value LATECOL (\d+)
Value EXCESSCOL (\d+)
Value CARRISEN (\d+)
Value RUNTS (\d+)
Value GIANTS (\d+)
Start
^Port\s+Align-Err.* -> FIRST
^Port\s+Single-Col.* -> SECOND
FIRST
^${PORT}\s+${ALIGNERR}\s+${FCSERR}\s+${XMITERR}\s+${RCVERR}\s+${UNDERSIZE}\s+${OUTDISCARDS} -> Continue.Record
SECOND
^${PORT}\s+${SINGLECOL}\s+${MULTICOL}\s+${LATECOL}\s+${EXCESSCOL}\s+${CARRISEN}\s+${RUNTS}\s+${GIANTS} -> Record
但是,输出不正确:
['Gi0/1', '1', '2', '3', '4', '5', '6', '', '', '', '', '', '', '']
['Gi0/2', '11', '12', '13', '14', '15', '16', '', '', '', '', '', '', '']
['Gi0/1', '1', '2', '3', '4', '5', '6', '', '', '', '', '', '', '']
['Gi0/2', '111', '122', '133', '144', '155', '166', '', '', '', '', '', '', '']
我在论坛上找到一篇文章,用纯正则表达式给出了一个解决方案:TextFSM logic - Avoid capturing same data twice
当我调整它以适应我的需要时,我有了一个匹配我需要的:https://regex101.com/r/DY0Meb/6
但是,我无法在TextFSM模板中翻译它,它失败了。 这是我的模板:
Value PORT (\S+(/\d+)?)
Value ALIGNERR (\d+)
Value FCSERR (\d+)
Value XMITERR (\d+)
Value RCVERR (\d+)
Value UNDERSIZE (\d+)
Value OUTDISCARDS (\d+)
Value SINGLECOL (\d+)
Value MULTICOL (\d+)
Value LATECOL (\d+)
Value EXCESSCOL (\d+)
Value CARRISEN (\d+)
Value RUNTS (\d+)
Value GIANTS (\d+)
Start
^${PORT}\s+${ALIGNERR}\s+${FCSERR}\s+${XMITERR}\s+${RCVERR}\s+${UNDERSIZE}\s+${OUTDISCARDS}(?=.*\1\s+${SINGLECOL}\s+${MULTICOL}\s+${LATECOL}\s+${EXCESSCOL}\s+${CARRISEN}\s+${RUNTS}\s+${GIANTS}) -> Record
你知道我为什么没有火柴吗? 我是正则表达式的初学者,我似乎找不到解决方案
欢迎任何帮助:)。 提前谢谢
我终于做了我想做的事
我的团队希望使用Ansible进行格式设置,所以我不得不临时凑合一下
我用ntc来负责这个
在NTC Slack成员的帮助下,我终于让它工作了。以下是我的想法:
TextFSM repo中有一个功能记录得非常糟糕,那就是您可以在一个索引文件中组合两个共享一个公共“Key”属性的模板
因此,我创建了两个模板:
以及:
然后,我创建了一个包含以下内容的索引文件:
您可以使用以下小脚本在Python中进行测试:
要启动它,只需使用以下命令:
要在Ansible中使用它,在安装ntc Ansible后,创建“模板”目录,将索引文件和模板文件放入其中,并在playbook中指定目录路径:
希望这能帮助任何人:)
有一种更简单的方法:
TTP-是我创建的一个库,用于使上述任务的解决方案看起来更简单
相关问题 更多 >
编程相关推荐