我需要替换特定文件中第一次出现的某个字符串。
我想为此使用 Ansible 的替换模块。
- hosts: abc
tasks:
- name: Replace first occurence of specific string
replace:
path: /etc/config/abc_host/application.yml
regexp: 'Unix'
replace: "Linux"
这将替换此特定 .yml 文件中所有出现的Unix
with 。Linux
但我还有一些其他主机(def_host、ghi_host 等),我想仅将第一次出现的 替换Unix
为Linux
.
那么,有两个问题需要解决:
首先,使用主机名作为路径中的变量。我想要的不是硬编码 abc_host.yml 之类的东西path: /etc/config/($host)_host/application.yml
。
其次,我只想替换第一次出现的特定字符串(而不是任何其他后续出现的字符串)。
答案1
对于主机变量,您可以使用 inventory_hostname 或 inventory_hostname_short,具体取决于您需要多少名称。 inventory_hostname 具有全名,短名称具有第一个句点的名称。
我没有在 Ansible 中尝试过,但这可能有效
replace:
regexp: '^(.*?\.)Unix([.\n]*)$'
replace: '\1Linux\2'