【发布时间】:2020-07-14 17:58:58
【问题描述】:
这是我要解析的输出:
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 中工作. 我无法创建新任务来解析数据并单独执行拆分,因为我需要通过循环运行此验证。
【问题讨论】:
-
请分享代码。
-
您能否使用捕获和匹配从 1 组开始的数字并以某种方式检查值?
\d+\.\d+\.\d+\.\d+\s\s.*\b([1-9]\d*)$regex101.com/r/Xh66TK/1 -
我试图沿着那条分组路线走下去,但无法让语法正常工作。根据您提供的链接,您上面的语法实际上与我正在寻找的最后一个值不匹配。它匹配整行,但我需要验证每一行的最后一个索引。
-
它捕获第 1 组中的最后一个数字,以绿色突出显示。这是正确的值,不是吗?
-
抱歉,我没有注意到我的屏幕上有眩光的绿色。这可能有效,让我在我的剧本中尝试一下。谢谢!