lineinfile モジュールでは、行全体が置き換えられます。
行が長い場合は、行全体をもう一度繰り返す必要があります。
ファイル内の単一のWordを置き換えたいとします。
#abc.conf
This is my horse
これは脚本です:
- lineinfile: dest=abc.conf
state=present
regexp='horse'
line='This is my dog'
backup=yes
sed 's/horse/dog/g'
のような何かを達成する方法はありますか?
backreferences を使用して、行の他の部分(変更しないでください)を取得できます。
- lineinfile: dest=abc.conf
state=present
regexp='^(.*)horse(.*)$'
line='\1dog\2'
backup=yes
backrefs=yes
新しいモジュール replace1.6
バージョン:
- replace:
dest=abc.conf
regexp='horse'
replace='dog'
backup=yes
1つのブロックでさらに置換操作を行う必要があり、ファイルがローカルにある場合は、テンプレートファイルの変数を置き換えてファイルをリモートにコピーするテンプレートの使用を検討することをお勧めします。
- template: src=/mytemplates/foo.j2 dest=/etc/file.conf
ローカルファイルでは、次のようなansible sintaxで変数を書くことができます
{{variable}}
スクリプトのスコープ内にある場合は置き換えられます。 ここ ドキュメント。