首页 > 解决方案 > 在同一行执行 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 中工作。我无法创建新任务来解析数据并单独执行拆分,因为我需要通过循环运行此验证。

标签: regexsplitansible

解决方案


选择行时,反转字符串,然后拆分第一项。例如

msg: "{{ (my_line|reverse).split()|first }}"

推荐阅读