Python ansible模块外壳中的regexp问题

Python ansible模块外壳中的regexp问题,python,regex,shell,ansible,Python,Regex,Shell,Ansible,在我的ansible剧本中,任务实现了用字符替换文件文本中的问题。我正在使用带sed的ansible模块shell 我想认识到这个问题 txt.file:一些文本@@VAR\u NUMBER\u ONE@ 新的txt.file:一些文本{{VAR\u NUMBER\u ONE}} - name: sed shell: sed -i 's|@@\([a-zA-Z_ ]*\)@@|\{{\1}}|g' txt.file 我犯了致命的错误 致命:[localhost]:失败!=>{

在我的ansible剧本中,任务实现了用字符替换文件文本中的问题。我正在使用带sed的ansible模块shell

我想认识到这个问题

txt.file:
一些文本@@VAR\u NUMBER\u ONE@

新的txt.file:
一些文本{{VAR\u NUMBER\u ONE}}

  - name: sed
      shell: sed -i 's|@@\([a-zA-Z_ ]*\)@@|\{{\1}}|g' txt.file
我犯了致命的错误

致命:[localhost]:失败!=>{ “msg”:“在模板化's|@\([a-zA-Z\*\)@\{{1}}}}g'时发生未经处理的异常。错误是,原始消息:在25处出现意外字符u'\\” }

Q:“用字符替换文件中的文本”

txt.file之前:
Some text@@VAR\u NUMBER\u ONE@

txt.file之后:
Some text{{VAR\u NUMBER\u ONE}

  - name: sed
      shell: sed -i 's|@@\([a-zA-Z_ ]*\)@@|\{{\1}}|g' txt.file
A:下面的任务就可以了

- replace:
    path: "txt.file"
    regexp: '^(.*)@@(.*)@@$'
    replace: '{{ "\1" + "{{" + "\2" + "}}" }}'
regexp字符串解释如下:

  • ^
    字符串的开头
  • (.*)
    存储在
    \1
  • @
    匹配@@
  • (.*)
    存储在
    \2
  • @
    匹配@@
  • $
    字符串的结尾
替换字符串是通过连接4个字符串创建的,因为在YAML
{{
}}
中使用了扩展变量。

尝试
sed-i's|@\([^@]*\)@{\1}}}{g'txt.file
。不确定,但可能需要将每个反斜杠加倍。