我使用Ansible的替换模块(http://docs.ansible.com/ansible/replace_module.html)。
我的档案是:
...
net route-domain /Common/0 {
id 0
vlans {
/thisrow/AAAA_yyyyy
/Common/http-tunnel
/Common/socks-tunnel
/Common/BIGIP-HA
/thisrow/AAAA_xxxxx
}
}
...
我需要删除包含/ thisrow / inside vlans的所有行。
我正在使用此正则表达式:(^ vlans )(?P<vlanrow>){([^}]*)}{0}.*vasgk.*\n
但我不知道如何从 vlanrow 组中删除所有 thisrow
谢谢, 的Riccardo
这不是重复。 Ansible不是问题。问题是正则表达式只匹配1次此行。在https://regex101.com/r/n3rRsl/1
上试用答案 0 :(得分:0)
我已经提出了以下的剧本,使用了你的一些改进的正则表达式和你提供的regex101的样本数据。
- hosts: localhost
tasks:
- replace:
dest: /home/user/config.conf
regexp: '(^ vlans )(?P<vlanrow>){([^}]*)}{0}(\s{8}/vasgk.*)\n'
replace: '\1\2{\3'
register: result
until: result.changed == False
retries: 4094 # you can't have more vlans!
结果如下:
net route-domain /Common/0 {
id 0
vlans {
/Common/http-tunnel
/Common/socks-tunnel
/Common/BIGIP-HA
}
}
虽然看起来很慢,但应该给你一个想法。希望有所帮助!
修改强>
变
(^ vlans )(?P<vlanrow>){([^}]*)}{0}(.*/vasgk.*)\n
至(^ vlans )(?P<vlanrow>){([^}]*)}{0}(\s{8}/vasgk.*)\n
,这解决了间距问题。