我正在使用Ansible和TextFSM(Python)模板动态地从网络设备中提取LLDP信息,然后将LLDP输出应用到相同的设备接口描述。我目前有一个工作模式,但我需要微调写入接口描述的内容,以匹配我们的命名约定(主机名接口),其中主机名不能包括FQDN,接口应为接口的前三个小写字母(在本例中为“eth”),紧接着是接口号 (24). 最终结果看起来像“lab-fr-sw01-eth24”
我可以使用(\S+)为模板中的每个变量提取适当的输出:
Value NEIGHBOR (\S+)
Value LOCAL_INTERFACE (\S+)
Value NEIGHBOR_INTERFACE (\S+)
CLI输出示例: Et1实验室-fr-sw01。测试.本地以太网24 120
唯一的问题是,有时交换机会像上面那样为“NEIGHBOR”变量提取FQDN,有时则不会。现在我正在尝试为每个变量编写一个特定的regex(TextFSM templates only use regex)语句。对于邻居变量,我尝试将第二个非空格字符与“.”匹配(如果存在)。到目前为止,我只能用(^\S+)准确地获取本地接口(Et1),然后当我试图用^[^.]+获取主机名时,我还包括本地接口输出“Et1”。为了匹配,我一直在使用https://regex101.com
Et1实验室-fr-sw01。测试.本地以太网24 120
Where LOCAL_INTERFACE = Et1, --> (^\S+)
NEIGHBOR = lab-ew-sw01.test.local and --> ^[^.]+
NEIGHBOR_INTERFACE = Ethernet24 --> ?
写入设备接口描述的预期最终结果类似于“lab-fr-sw01-eth24”。但是,因为我们有几个站点,而且每个站点的名称都包含在主机名中,所以我不能依赖于尝试逐字匹配主机名。你知道吗
我猜这里我们希望捕获字符串的三个部分,我们可以用一个简单的表达式来实现,例如:
Demo 1
我们期望的输出在
#1
、#2
和#3
组中,这里我们还应用了i
标志。你知道吗测试
Demo
正则表达式电路
jex.im可视化正则表达式:
编辑
为了捕获
test.local
,我们只需从字符列表中删除.
:Demo 2
相关问题 更多 >
编程相关推荐