На основе этого примера:
- lineinfile: dest=/opt/jboss-as/bin/standalone.conf regexp='^(.*)Xms(\d+)m(.*)$' line='\1Xms${xms}m\3' backrefs=yes
из эта документация, в Ansible пытались заменить регулярное выражение.
Ansible версия
user@server:/home$ ansible --version
ansible 2.1.1.0
/ путь / к / файлу:
helloworld
Ansible фрагменты:
- lineinfile:
dest: /path/to/file
regexp='^(hello)world$'
line='\1030'
попытка 2
- lineinfile:
dest: /path/to/file
regexp='^(hello)world$'
line="\1030"
Ожидаемый результат:
hello030
Текущий результат:
\1030
Вопросы
\1030
вместо того hello030
?Почему результат \ 1030 вместо hello030?
По умолчанию модуль lineinfile: backrefs: false
. Ваш regexp='^(hello)world$'
соответствует всему содержимому файл. Буквально от line='\1030'
заменяет содержимое.
Как это решить?
backrefs: true
line:
Обратная ссылка с последующими числами не будет работать должным образом. Вместо этого вам понадобится именованная группа. например \g<1>
- name: Replace the world
lineinfile:
dest: file
regexp: '^(hello)world$'
line: '\g<1>030'
backrefs: true
Я предполагаю, что это потому, что он соответствует целому \ 1030 (как 1030-й backref). Может быть, сначала попробуйте \ 1 030, и вы увидите, причина в этом.