在字符串中捕获接口,然后将其存储在变量中
Catch the Interface in the String then Store it in a Variable
基本上我的目标是从我用来存储在变量 intf 中的字符串中捕获 cisco 接口(即 Gi1/0)。我很困惑如何使用 set_fact 构造我的正则表达式,它将从 intf 变量中捕获接口。
基于 regex101.com 这个正则表达式将匹配 Gi1/0 接口:
^\w+(-\w+)?\d+(([\/:]\d+)+(\.\d+)?)?$
我尝试使用下面的代码来捕获接口 Gi1/0,并将其存储在变量 storehere 中,但只遇到了错误。
- name: Catch interface only ie. Gi1/0 and store in storehere variable
set_fact:
storehere: "{{ intf | regex_findall(^\w+(-\w+)?\d+(([\/:]\d+)+(\.\d+)?)?$) }}"
这是我的完整代码:
Full Script
Execution W/o Regex
Error W Regex
您的完整代码似乎暗示输出中可能有多行。大概它们都遵循相同的模式,并且您需要从每个数据中获取的数据只是第一列 - 接口名称?如果是这样,这是否满足您的需求:
- set_fact:
interfaces: "{{ interfaces | default([]) }} + {{ [ item | regex_search('^([^ ])+') ] }}"
loop: "{{ rl00.stdout_lines | first }}"
- debug:
var: interfaces
(注意:在您的示例中,rl00.stdout_lines 包含一个列表,其中输出行列表作为其唯一元素。这看起来有点奇怪,我不确定是否存在其他元素会出现的情况存在。此答案应该适用于您提供的示例数据,但如果返回其他元素,可能 运行 会出现问题。)
这个:
- 循环遍历 rl00 注册变量
中包含的 first 列表中的行
- 从字符串开头过滤第一个非space字符
- 将它们添加为 'interfaces' 列表中的项目
这应该会给您留下一个包含接口名称的列表。然后您可以按照自己喜欢的方式对待它们,例如,如果您需要将它们放在单独的 space 分隔行上,那么您可以:
- debug:
var: interfaces | join(' ')
基本上我的目标是从我用来存储在变量 intf 中的字符串中捕获 cisco 接口(即 Gi1/0)。我很困惑如何使用 set_fact 构造我的正则表达式,它将从 intf 变量中捕获接口。
基于 regex101.com 这个正则表达式将匹配 Gi1/0 接口:
^\w+(-\w+)?\d+(([\/:]\d+)+(\.\d+)?)?$
我尝试使用下面的代码来捕获接口 Gi1/0,并将其存储在变量 storehere 中,但只遇到了错误。
- name: Catch interface only ie. Gi1/0 and store in storehere variable
set_fact:
storehere: "{{ intf | regex_findall(^\w+(-\w+)?\d+(([\/:]\d+)+(\.\d+)?)?$) }}"
这是我的完整代码:
Full Script
Execution W/o Regex
Error W Regex
您的完整代码似乎暗示输出中可能有多行。大概它们都遵循相同的模式,并且您需要从每个数据中获取的数据只是第一列 - 接口名称?如果是这样,这是否满足您的需求:
- set_fact:
interfaces: "{{ interfaces | default([]) }} + {{ [ item | regex_search('^([^ ])+') ] }}"
loop: "{{ rl00.stdout_lines | first }}"
- debug:
var: interfaces
(注意:在您的示例中,rl00.stdout_lines 包含一个列表,其中输出行列表作为其唯一元素。这看起来有点奇怪,我不确定是否存在其他元素会出现的情况存在。此答案应该适用于您提供的示例数据,但如果返回其他元素,可能 运行 会出现问题。)
这个:
- 循环遍历 rl00 注册变量 中包含的 first 列表中的行
- 从字符串开头过滤第一个非space字符
- 将它们添加为 'interfaces' 列表中的项目
这应该会给您留下一个包含接口名称的列表。然后您可以按照自己喜欢的方式对待它们,例如,如果您需要将它们放在单独的 space 分隔行上,那么您可以:
- debug:
var: interfaces | join(' ')