Ansible正则表达式逃脱美元字符

时间:2016-03-01 08:18:11

标签: regex ansible ansible-2.x

我正在尝试使用Ansible修改配置文件中的URL值

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

我正在使用lineinfile模块,但它不起作用,我试图用双反斜杠转义$,但它也没有用。

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

1 个答案:

答案 0 :(得分:3)

我认为你的正则表达式是正确的。我刚测试了这个,写入文件的行实际上有引号。这是/etc/log.conf

的内容
'$CONSOLE_URI=http://google.com';

如果这是你的意图,我不相信,你当然需要在正则表达式中添加引号。

不要问我为什么单引号有时会起作用,有时也不行。在这种情况下,您需要使用双引号作为行,而对于regexp,单引号可以使用...

- 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:不确定您的行的;,如果它应该在文件内部。