Ansible“raw”模块-使用正则表达式中的转义字符执行“sed”命令

Ansible“raw”模块-使用正则表达式中的转义字符执行“sed”命令

我想使用原始模块来运行包含转义字符的“sed”命令。

- name: Search for prefix in file and replace all following text with addition
  raw: "sed 's/\({{ prefix }}\)\(.*\)/\1 {{ addition }}/g' {{ file }} > {{ file }}.test"

然而,这抱怨:

ERROR! Syntax Error while loading YAML.
found unknown escape character

其中 '^' 指向字符串中的第一个 '\'。如何在此命令中包含转义字符,而 ansible 不会尝试处理它们?

答案1

以下任务有效

- raw: 'sed --regexp-extended ''s/({{ prefix }})(.*)/\1 {{ addition }}/g'' {{ file }} > {{ file }}.test'

使用变量

file: test
prefix: AAA
addition: XXX

给出

$ cat test
alsdjflaskdjfasn AAA fasdfasdfsadf

$ cat test.test 
alsdjflaskdjfasn AAA XXX

将正则表达式从“^”修改为“$”

- raw: 'sed --regexp-extended ''s/^(.*)({{ prefix }})(.*)$/\1 {{ addition }}/g'' {{ file }} > {{ file }}.test2'

给出

$ cat test.test2
alsdjflaskdjfasn  XXX

笔记

相关内容