如何在Ansible替换模块中转义+字符

3

我想在配置文件的一行末尾添加一个斜杠,但即使没有返回错误,更改也未生效。 迄今为止我尝试过以下内容:

- replace:
    path: /etc/aide.conf
    regexp: "/var/log LOG+ANF+ARF"
    replace: "/var/log/ LOG+ANF+ARF"
    backup: yes

据我注意,问题在于+字符。

我尝试像这样转义它们:

- replace:
    path: /etc/aide.conf
    regexp: "/var/log LOG\+ANF\+ARF"
    replace: "/var/log/ LOG\+ANF\+ARF"
    backup: yes

但是我遇到了一个“找到未知转义字符”的错误。
我还尝试了这个:
regexp: r"/var/log LOG\+ANF\+ARF"

我做错了什么?

1个回答

2
不要对replace字符串进行转义。它不是正则表达式,只是一个将替换正则表达式的字符串。在replace中加号没有特殊含义。
    - replace:
        path: aide.conf
        regexp: "/var/log LOG\\+ANF\\+ARF"
        replace: "/var/log/ LOG+ANF+ARF"
        backup: yes

提供(参见选项 --check --diff)

TASK [replace] *************************************************************
--- before: aide.conf
+++ after: aide.conf
@@ -1 +1 @@
-/var/log LOG+ANF+ARF
+/var/log/ LOG+ANF+ARF

请参阅7.3.1. 双引号样式7.3.2. 单引号样式的区别。在单引号正则表达式中不需要转义反斜杠,例如下面的任务会给出相同的结果。
    - replace:
        path: aide.conf
        regexp: '/var/log LOG\+ANF\+ARF'
        replace: "/var/log/ LOG+ANF+ARF"
        backup: yes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接