Ansible regex_findall多个字符串

时间:2019-02-11 16:36:48

标签: ios regex ansible findall

Cisco IOS路由器,做一个“目录”,我想获取名称中带有“ .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”结尾),因为我想使用这些值并删除不需要的文件。

我是编程的新手,所以regex示例有点混乱。

3 个答案:

答案 0 :(得分:0)

您可以使用此正则表达式

^[\w\W]+?(?=(c.*\.bin))\1$
  • ^-字符串的开头。
  • [\w\W]+?-一次或多次匹配任何内容(惰性模式)。
  • (?=(c.*\.bin))-正向超前匹配c,后跟\.bin(第1组)
  • \1-匹配组1。
  • $-字符串结尾。

Demo

答案 1 :(得分:0)

要匹配以c开头(或字符串开头)的文件名,您可以在(?<!\S)后使用否定式查询来检查左边的字符不是非空格字符

然后匹配1+次而不是空格字符\S+或在字符类[\w.-]+中列出允许匹配的字符。匹配之后,点\.后跟bin

最后,您可以使用单词边界\b来防止bin成为较大单词的一部分:

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

regex101 demo

答案 2 :(得分:0)

谢谢Code Maniac! 您的代码找到一个实例,而我需要找到所有实例。使用您给我的内容以及其他示例,我发现它可以正常工作:

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

现在我得到了: 任务[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 ****** 好的:[10.35.91.200] =>更改= false   ansible_facts:     二进制文件:     -c2900-universalk9-mz.SPA.153-3.M5.bin     -c3900e-universalk9-mz.SPA.151-4.M10.bin     -c2800nm-adventerprisek9-mz.151-4.M12a.bin

接下来的任务是弄清楚如何使用每个元素。谢谢!