Назад | Перейти на главную страницу

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

Я хочу использовать необработанный модуль для запуска команды sed, которая будет содержать escape-символы.

- 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-символы в эту команду, не пытаясь обработать их?

Задача ниже работает

- 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

Ноты