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. Здесь документы.