Модуль Ansible 'raw' - использование экранированных символов в регулярных выражениях для выполнения команды 'sed'

Модуль Ansible 'raw' - использование экранированных символов в регулярных выражениях для выполнения команды 'sed'

Я хочу использовать модуль raw для запуска команды «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

С '^', указывающим на первый '\' в строке. Как включить escape-символы в эту команду, чтобы 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

Примечания

Связанный контент