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示例有点混乱。
答案 0 :(得分:0)
您可以使用此正则表达式
^[\w\W]+?(?=(c.*\.bin))\1$
^
-字符串的开头。[\w\W]+?
-一次或多次匹配任何内容(惰性模式)。(?=(c.*\.bin))
-正向超前匹配c,后跟\.bin
(第1组)\1
-匹配组1。$
-字符串结尾。答案 1 :(得分:0)
要匹配以c
开头(或字符串开头)的文件名,您可以在(?<!\S)
后使用否定式查询来检查左边的字符不是非空格字符
然后匹配1+次而不是空格字符\S+
或在字符类[\w.-]+
中列出允许匹配的字符。匹配之后,点\.
后跟bin
。
最后,您可以使用单词边界\b
来防止bin
成为较大单词的一部分:
(?<!\S)[\w.-]+\.bin\b
答案 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
接下来的任务是弄清楚如何使用每个元素。谢谢!