我需要替换特定文件中某个字符串的第一次出现。
我想使用Ansible的替换模块来实现这一点。
- hosts: abc
tasks:
- name: Replace first occurence of specific string
replace:
path: /etc/config/abc_host/application.yml
regexp: 'Unix'
replace: "Linux"
这将在这个特定的. yml文件中用Linux
替换所有出现的Unix
。但我还有一些其他主机(def_host,ghi_host等),我想只用Linux
替换第一次出现的Unix
。
因此,有两个问题需要解决:
首先,使用主机名作为path中的变量,而不是硬编码abc_host.yml,我想要像path: /etc/config/($host)_host/application.yml
这样的东西。
其次,我只想替换特定字符串的第一个出现(而不是它的任何其他后续出现)。
2条答案
按热度按时间1cklez4t1#
对于第一部分,您可以使用像
ansible_hostname
和inventory_hostname
这样的变量,例如path: /etc/config/{{ ansible_hostname }}_host/application.yml
(参见post了解差异)。要解决第二部分问题,可以使用lineinfile模块,如下所示:
dced5bon2#
你可以使用ansible after来替换只有在提到的关键字之后
我的档案
在这里test_tree_1只会替换版本之后:
注解版本是一个可分析变量