regex
  • ansible
  • ansible-2.x
  • 2016-03-01 84 views 0 likes 
    0

    我試圖使用AnsibleAnsible正則表達式逃脫

    $CONSOLE_URI = "http://172.18.18.103/controller/"; 
    

    我使用lineinfile模塊修改配置文件中的URL值美元字符,但它不工作,我試圖逃跑$雙反斜線,但它也沒有奏效。

    - lineinfile: dest=/etc/log.conf regexp='^\\$CONSOLE_URI' line='$CONSOLE_URI=http://google.com'; 
    
    +0

    你正在使用什麼Ansible版本? – udondan

    +0

    我使用Ansible版本2.1.0 – Deano

    +0

    所以devel直接從github分支,對不對? – udondan

    回答

    2

    我認爲你的正則表達式是正確的。我只是測試了這一點,寫入文件的行實際上有引號。這是/etc/log.conf內容:

    '$CONSOLE_URI=http://google.com'; 
    

    如果這是你的意圖,我不相信,你當然需要引號添加到正則表達式。

    不要問我爲什麼單引號有時有效,有時不會。在這種情況下,你需要反正用雙引號線而正則表達式的單引號工作...

    - lineinfile: dest=/etc/log.conf regexp='^\\$CONSOLE_URI' line="$CONSOLE_URI=http://google.com" 
    

    ,我強烈建議使用YAML語法,而不是key = value的語法。我發現後者非常難以閱讀,而Ansible全都是關於可讀性的。在適當的YAML語法中,您也可以幾乎完全廢除報價,如果使用更復雜的命令(其中包括單引號和雙引號),則您將不得不再次轉義,這對您有很大幫助。因此,理想的(在我看來),你的任務是這樣的:

    - lineinfile: 
        dest: /etc/log.conf 
        regexp: ^\$CONSOLE_URI 
        line: $CONSOLE_URI=http://google.com 
    

    在你只需要逃避$一旦情況。

    這是用Ansible 2.0.0.2測試的。

    PS:不知道你的線路的;,如果這應該是在文件內或不。

    +1

    我感謝您的幫助和解釋,它的工作! – Deano

    相關問題