Ansible「原始」模組 - 使用正規表示式中的轉義字元執行「sed」指令

Ansible「原始」模組 - 使用正規表示式中的轉義字元執行「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

筆記

相關內容