
エスケープ文字を含む「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
ノート
- 使用7.3.2. シングルクォートスタイル
- とsed --正規表現拡張括弧をエスケープする必要はありません。