我想使用原始模块来运行包含转义字符的“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
笔记
- 使用7.3.2. 单引号样式
- 和sed --regexp-extended括号无需转义。