Ansible regex_findall多个字符串

问题描述 投票:0回答:3

Cisco IOS路由器,执行“dir”,我想在名称中使用“.bin”获取所有文件名。

示例字符串:flash0的目录:/

1  -rw-    95890300  May 24 2015 11:27:22 +00:00  c2900-universalk9-mz.SPA.153-3.M5.bin
2  -rw-    68569216   Feb 8 2019 20:15:26 +00:00  c3900e-universalk9-mz.SPA.151-4.M10.bin
3  -rw-       46880  Oct 25 2017 19:08:56 +00:00  pdcamadeusrtra-cfg
4  -rw-         600   Feb 1 2019 19:36:44 +00:00  vlan.dat

总计260153344字节(95637504字节免费)

我已经弄清楚如何拉“bin”,但我无法弄清楚如何拉出整个文件名(以“c”开头,以“bin”结尾),因为我想然后使用这些值并删除不需要的文件。

我是编程的新手,所以正则表达式的例子有点令人困惑。

ios regex ansible findall
3个回答
0
投票

你可以使用这个正则表达式

^[\w\W]+?(?=(c.*\.bin))\1$
  • ^ - 字符串的开头。
  • [\w\W]+? - 匹配任何一次或多次(懒惰模式)。
  • (?=(c.*\.bin)) - 积极前瞻匹配c后面跟着\.bin(第1组)
  • \1 - 第1组。
  • $ - 字符串结尾。

Demo


0
投票

要匹配以c开头的文件名(或在字符串的开头),您可以使用负的lookbehind (?<!\S)来检查左边的内容不是非空白字符。

然后匹配1次以上不是空白字符\S+或列在字符类[\w.-]+中允许的字符匹配的内容。在那场比赛之后,一个点\.跟随bin

最后你可以使用单词边界\b来阻止bin成为一个更大的单词的一部分:

(?<!\S)[\w.-]+\.bin\b

regex101 demo


0
投票

谢谢Code Maniac!你的代码找到一个实例,我需要找到所有实例。使用你给我的东西加上其他一些例子,我发现这个工作:

binfiles =“{{dir_response.stdout [0] | regex_findall('\ b(?=(c。*。bin))\ b')}}”

现在我明白了:TASK [set_fact] ***************************************** ************************************************** *************任务路径:/export/home/e130885/playbooks/ios-switch-upgrade/ios_clean_flash.yml:16 2019年2月12日星期二08:29:58 -0600(0: 00:00.350)0:00:03.028 ****** ok:[10.35.91.200] => changed = false ansible_facts:binfiles: - c2900-universalk9-mz.SPA.153-3.M5.bin - c3900e- universalk9-mz.SPA.151-4.M10.bin - c2800nm-adventerprisek9-mz.151-4.M12a.bin

在下一个确定如何使用每个元素的任务上。谢谢!

© www.soinside.com 2019 - 2024. All rights reserved.