Ansible: возможно ли искать одно слово
В модуле lineinfile он заменяет полную строку.
Если линия длинная, мне нужно снова повторить всю строку.
Предположим, что я хочу заменить одно слово в файле:
#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'
?
Ответы
Ответ 1
Вы можете использовать обратные ссылки для извлечения других частей (которые не должны быть изменены) строки:
- lineinfile: dest=abc.conf
state=present
regexp='^(.*)horse(.*)$'
line='\1dog\2'
backup=yes
backrefs=yes
Ответ 2
Новый модуль replace доступен с версии 1.6
:
- replace:
dest=abc.conf
regexp='horse'
replace='dog'
backup=yes
Ответ 3
Если вам нужно сделать больше операций замены в одном блоке, и у вас есть файл локально, вам может потребоваться использовать шаблон, который заменяет переменные в файле шаблона и копирует файл на удаленный компьютер:
- template: src=/mytemplates/foo.j2 dest=/etc/file.conf
В локальном файле вы можете написать переменную с доступным sintax, например
{{variable}}
и он будет заменен, если он находится в области script. Здесь документы.