一组中的行删除

时间:2017-04-13 15:47:10

标签: regex ansible

我使用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

上试用

1 个答案:

答案 0 :(得分:0)

我已经提出了以下的剧本,使用了你的一些改进的正则表达式和你提供的regex101的样本数据。

playbook.yml

- 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,这解决了间距问题。