我正在使用 Ansiblesreplace
模块,我只想替换文件中的第一个匹配项。
我有示例字符串:
example.string.in.my.text=test.@@sometext@@
我希望:
example.string.in.my.text=test.$$sometext@@
我的 Ansible 使用该replace
模块进行游戏:
- name: tasks replace
replace:
regexp: '(@@+?)'
replace: '$$'
这个任务对我来说都改变了@@
example.string.in.my.text=test.$$sometext$$
如何让它只改变第一次出现的@@
?
答案1
GMaster 的答案将匹配每行中的最后一个匹配项,以下版本使用非贪婪匹配来查找一行中的第一个匹配项,并使用贪婪匹配来查找文件的其余部分,以避免匹配以下行中的任何进一步匹配项:
- name: tasks replace
replace:
regexp: '^(.*?\.)@@([.\n]*)$'
replace: '\1$$\2'
根据最新社区版本回答https://docs.ansible.com/ansible/latest/collections/ansible/builtin/replace_module.html
答案2
- name: tasks replace
replace:
regexp: '^(.*\.)@@(.*)$'
replace: '\1$$\2'