Ansible の「raw」モジュール - 正規表現でエスケープ文字を使用して「sed」コマンドを実行する

Ansible の「raw」モジュール - 正規表現でエスケープ文字を使用して「sed」コマンドを実行する

エスケープ文字を含む「sed」コマンドを実行するために、raw モジュールを使用したいと思います。

- 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

ノート

関連情報