regex - 在同一行执行 regex_findall 和 split()
问题描述
这是我要解析的输出:
hostname#show bgp vrf vrfname summary | i 1.1
BGP Route Distinguisher: 1.1.1.1:0
BGP router identifier 1.1.1.1, local AS number 2222
1.1.1.3 0 64512 349608 316062 896772 0 0 2w4d 1
我有以下正则表达式,它成功匹配最后一行。现在我需要分割那条线并查看最后一个索引。在这种情况下,它是“1”,但如果该值为“0”,我会想失败。
- name: debug test
debug:
msg: "{{show_bgp_sessions.data | regex_findall('\\d+\\.\\d+\\.\\d+\\.\\d+\\s\\s.*')}}"
我尝试在“msg”行的末尾添加几种不同格式的拆分,以便我可以获取最后一个索引以在 failed_when 语句中进行比较:
msg: "{{show_bgp_sessions.data | regex_findall('\\d+\\.\\d+\\.\\d+\\.\\d+\\s\\s.*') | split(' ')}}"
但我收到以下错误消息:
"template error while templating string: no filter named 'split'. String:
我还尝试使用几种不同形式的“ends_with”来验证字符串中的最后一个索引,因为我在 python 经验中使用了很多,但我无法让它在 ansible 中工作。我无法创建新任务来解析数据并单独执行拆分,因为我需要通过循环运行此验证。
解决方案
选择行时,反转字符串,然后拆分第一项。例如
msg: "{{ (my_line|reverse).split()|first }}"