2014-03-14 29 views
16

lineinfile模塊中,它會替換整行。Ansible:是否可以搜索替換單個字

如果行很長,我必須重複整行。

讓我們假設我要替換文件中的一個字:

#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'

回答

16

您可以使用backreferences檢索其它部分(即不應該改變)行:因爲1.6版本

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

如果要替換的單詞不是「狗」,而是像127.0.1.1那樣的一些IP地址,該怎麼辦?我得到的是一些奇怪的字符.... –

+0

爲ip地址改變正則表達式'regexp =「127 \ .0 \ .0 \ .1。*」' – san1512

29

提供的新模塊replace

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

它不會像這樣工作;錯誤:解析任務「.... backup = yes」時發生錯誤。 確保引號匹配或正確轉義 –

1

如果你需要做的在一個塊中更多的替換操作,並且您在本地擁有該文件,則可能需要考慮使用模板,該模板替換模板文件中的變量並將文件複製到遠程:

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

在本地文件,你可以寫與ansible sintax可變像

{{variable}} 

,如果它是在腳本的範圍將被取代。 Here該文檔。