Ansible替换为替换某个正则表达式组

时间:2016-05-19 11:41:54

标签: regex ansible ansible-playbook

我正在使用Ansible replace module替换一个字符串,该字符串是我的正则表达式的第一组。

- name: Replace my_address
      replace:
        dest=/etc/mydata/info.yaml
        regexp="^my_address\W\s(localhost)$"
        replace="{{ ansible_eth0.ipv4.address }}"

在我的文件中,我有几个localhost提及,我只想在以下行中替换localhostmy_address: localhost

到目前为止,代码仍然用IP地址替换整行。有没有办法只替换第一组正则表达式?

2 个答案:

答案 0 :(得分:2)

你需要使用lookbehind:

regexp="(?<=^my_address\W\s)localhost$"

请参阅regex demo

只有消费的部分(localhost)才会被替换,而(?<=^my_address\W\s)只会检查my_address是否有非字字符+前面的空格。

答案 1 :(得分:1)

要引用特定的捕获组,您可以使用 \g<1>\g<groupName> 代替。请参考https://docs.ansible.com/ansible/latest/collections/ansible/builtin/replace_module.html