Ansible替换命令

时间:2018-08-14 22:47:23

标签: regex ansible

我想用export PS1="$highred[${xx_sid}@\h \W]$normalr$"中的export PS1="\[$highred\][${xx_sid}@\h \W]\[$normalr\]\$ "替换/home/oracle/.bash_profile

Playbook运行正常,没有任何错误,但未进行任何更改。 Ansible版本2.5.2。

下面是剧本:

    ---
     - name : 'vj'
       hosts : 'all'
       gather_facts : 'false'
       tasks :
        - name : 'replace line'
          replace :
            path : '/home/oracle/.bash_profile'
            regexp : "export PS1=\"$highred[${xx_sid}@\\h \\W]$normalr$\""
            replace : "export PS1=\"\\[$highred\\][${xx_sid}@\\h \\W]\\[$normalr\\]\\$ \""
            backup : yes

这是调试模式输出:

    "changed": false,
    "invocation": {
        "module_args": {
            "after": null,
            "attributes": null,
            "backup": true,
            "before": null,
            "content": null,
            "delimiter": null,
            "directory_mode": null,
            "encoding": "utf-8",
            "follow": false,
            "force": null,
            "group": null,
            "mode": null,
            "owner": null,
            "path": "/home/oracle/.bash_profile",
            "regexp": "export PS1=\"$highred[${xx_sid}@\\h \\W]$normalr$\"",
            "remote_src": null,
            "replace": "export PS1=\"\\[$highred\\][${xx_sid}@\\h \\W]\\[$normalr\\]\\$ \"",
            "selevel": null,
            "serole": null,
            "setype": null,
            "seuser": null,
            "src": null,
            "unsafe_writes": null,
            "validate": null
        }
    },
    "msg": ""
}
META: ran handlers
META: ran handlers

感谢专家的任何投入。

1 个答案:

答案 0 :(得分:2)

如果状态为ok,则表示未找到regexp参数中指定的正则表达式。

之所以找不到它,是因为正则表达式语法使用了$[\之类的字符。

要匹配所需的字符串,应指定:

regexp: export PS1="\$highred\[\${xx_sid}@\\h \\W\]\$normalr\$"

顺便说一句,不需要引用整个字符串。如果这样做,则变得更加复杂:

regexp: "export PS1=\"\\$highred\\[\\${xx_sid}@\\\\h \\\\W\\]\\$normalr\\$\""