Ansible 替换文件中第一次出现的位置

Ansible 替换文件中第一次出现的位置

我正在使用 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'

相关内容