
我想使用原始模組來運行包含轉義字元的“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-擴展括號不必轉義。