我正在使用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
提及,我只想在以下行中替换localhost
:my_address: localhost
。
到目前为止,代码仍然用IP地址替换整行。有没有办法只替换第一组正则表达式?
答案 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