user1994660
user1994660

Reputation: 5593

Ansible: Is it possible to search replace single word

In the lineinfile module, it replaces the full line.

If the line is long I have to repeat the whole line again.

Let us suppose I want to replace the single word in the file:

#abc.conf
This is my horse

this is the playbook:

 - lineinfile: dest=abc.conf
               state=present
               regexp='horse'
               line='This is my dog'
               backup=yes

is there any way to achieve someting like sed 's/horse/dog/g' ?

Upvotes: 18

Views: 37195

Answers (3)

Gismo Ranas
Gismo Ranas

Reputation: 6442

If you need to do more replace operations in one block and you have the file locally, you might want to consider using template, which substitutes variables in the template file and copies the file to the remote:

- template: src=/mytemplates/foo.j2 dest=/etc/file.conf

In the local file you can write a variable with ansible sintax like

{{variable}}

and it will be substituted if it is in the scope of the script. Here the docs.

Upvotes: 2

user2288008
user2288008

Reputation:

New module replace available since 1.6 version:

- replace:
    dest=abc.conf
    regexp='horse'
    replace='dog'
    backup=yes

Upvotes: 30

ghloogh
ghloogh

Reputation: 1684

You can use backreferences to retrieve other parts(that should not be changed) of the line:

 - lineinfile: dest=abc.conf
               state=present
               regexp='^(.*)horse(.*)$'
               line='\1dog\2'
               backup=yes
               backrefs=yes

Upvotes: 20

Related Questions