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”结尾),因为我想然后使用这些值并删除不需要的文件。
我是编程的新手,所以正则表达式的例子有点令人困惑。
你可以使用这个正则表达式
^[\w\W]+?(?=(c.*\.bin))\1$
^
- 字符串的开头。[\w\W]+?
- 匹配任何一次或多次(懒惰模式)。(?=(c.*\.bin))
- 积极前瞻匹配c后面跟着\.bin
(第1组)\1
- 第1组。$
- 字符串结尾。要匹配以c
开头的文件名(或在字符串的开头),您可以使用负的lookbehind (?<!\S)
来检查左边的内容不是非空白字符。
然后匹配1次以上不是空白字符\S+
或列在字符类[\w.-]+
中允许的字符匹配的内容。在那场比赛之后,一个点\.
跟随bin
。
最后你可以使用单词边界\b
来阻止bin
成为一个更大的单词的一部分:
(?<!\S)[\w.-]+\.bin\b
谢谢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
在下一个确定如何使用每个元素的任务上。谢谢!