Replace

Ansible - 替換文件中某些表達式的第一次出現 - 路徑包括主機名

  • December 7, 2021

我需要替換特定文件中某個字元串的第一次出現。

我考慮為此使用 Ansible 的替換模組。

- hosts: abc
 tasks:
 - name: Replace first occurence of specific string
   replace:
     path: /etc/config/abc_host/application.yml
     regexp: 'Unix'
     replace: "Linux"

這將替換此特定 .yml 文件中所有出現的Unixwith 。Linux但我也有一些其他主機(def_host、ghi_host 等),我只想將第一次出現的Unixwith替換為Linux.

所以,有兩個問題需要解決:

首先,使用主機名作為路徑中的變數。而不是硬編碼 abc_host.yml 我想要類似path: /etc/config/($host)_host/application.yml.

其次,我只想替換特定字元串的第一次出現(而不是任何其他後續出現的字元串)。

對於主機變數,您可以使用inventory_hostname 或inventory_hostname_short,具體取決於您需要多少名稱。inventory_hostname 具有全名,short 具有第一個句點的名稱。

我沒有在 Ansible 中嘗試過,但這可能有效

replace:
 regexp: '^(.*?\.)Unix([.\n]*)$'
 replace: '\1Linux\2'

引用自:https://unix.stackexchange.com/questions/680383