背景:

我们在使用python输出网络某些状态查询的时候会发现查询的配置会全部输出,但是大部分都是对于我们来说是无用的信息,那么如何提取我们想要的关键信息呢,答案就是使用TextFSM

首先我们先查看TextFSM的Github首页,里面有各式各样的模板list初始化,但是简单看下来就会发现以Cisco的设备模板为主,关于华为的模板只有一下四种。

github.com

图标

华为的TextFSM模板

1、display_interface_brief

2、display_lldp_neighbor

3、display_temperature

4、dis_version

通过命名即可看出。那么如果我们想筛选其他命令输出的结果关键字的话就只能通过自己自定义一份模板来使用了。

正文:如何构建一份TextFSM模板

一、TextFSM主体大概分为三个部分

1、Value值 (自定义,内容为命令输出后我们想要筛选的关键字,默认为全大写)

2、start (正则开始的地方)

3、正则匹配规则

4、EOF (相当于^.* -> Record,结束使用)

二、注意事项:

1、Start语句后面必须以正则表达式^开头

2、^ 后的$是用来调用前面设置好的Value并匹配该变量

3、Start下一行的^前面必须空两格

三、知识点

1、d+用来匹配数字,+代表贪婪匹配

2、w+用来匹配数字+字母,+代表贪婪匹配

3、s这个特殊序列用来匹配空格字符

四、Value的格式如下

Value [option[,option…]] name regex

options可以为空,可选的如下,简单入门我们可以先空出来,后续根据自己实际情况去看

1、Filldown 如果本条记录这个值未被识别,用前一个值的值来填充本条记录这个字段的值。

2、Key 每条记录的这个字段需要全局唯一

3、Required 这条记录的这个字段必须被识别出来才有效被记录

4、List 这个字段是列表值(比如allow vlan等 portchannel member)

5、Fillup Filldown的逆操作。

实操部分

1、案例

例如我们想要筛选华为display lldp neighbor brief 内关键字 Local Intf、Neighbor Dev、 Neighbor Intf、 Exptime(s)

代码部分:

Value LOCAL_INTF (S+) #对应Local Intf

Value NEIGHBOR_DEV (S+) #Neighbor Dev

Value NEIGHBOR_INTF (S+) #Neighbor Intf

Value EXPTIMES (d+) #Exptime

Start

^${LOCAL_INTF}s+${NEIGHBOR_DEV}s+${NEIGHBOR_INTF}s+${EXPTIMES}s+ -> Record

EOF

下面又要介绍一个神器

初学阶段如果我们使用python代码来调试正则匹配是否正确费时费力list初始化,可以通过下面的网址来做测试自己的正则是否成功

textfsm.nornir.tech

通过这个网站就可以快速的学习入门TextFSM模块了

后续:

当我们筛选出我们想要的值后可以通过openpyxl将数据写入表格,做一些自动化巡检啦,快去动手做吧。

限时特惠:本站每日持续更新海量设计资源,一年会员只需29.9元,全站资源免费下载
站长微信:ziyuanshu688