
Я хочу использовать модуль 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
Примечания
- Использовать7.3.2 Стиль с одинарными кавычками
- Сsed --regexp-расширенныйСкобки экранировать не нужно.