Я пробовал и искал, чтобы решить эту проблему, но ничего не подходило для моей проблемы.
Я использую ansible для получения конфигурации, и я хочу определенным образом манипулировать этой конфигурацией. Одна вещь, которую я хочу сделать, это добавить тег перед строкой с совпадением регулярного выражения, но на всех из них.
hello
something
something
hello
something
hello
должно быть:
tag:
hello
something
something
tag:
hello
something
tag:
hello
Я пытался использовать модуль lineinfile с опцией insertbefore, но этот добавляет тег только один раз к последнему совпадению. Я также пробовал цикл with_items, но мои параметры не меняются, я просто хочу, чтобы это было сделано для всех совпадений одного и того же регулярного выражения с добавлением одной и той же строки ранее.
Любые идеи, как я могу этого добиться?
вы можете использовать модуль замены:
- name: replace txt
hosts: localhost
tasks:
- name: Replace before
ansible.builtin.replace:
path: "./file.txt"
regexp: '^(hello)$'
replace: 'tag:\n\1'
результат:
tag:
hello
something
something
tag:
hello
something
tag:
hello
если вы используете это регулярное выражение:
regexp: '^(?:tag:\n)?(hello)$'
replace: 'tag:\n\1'
это не добавляет новые tag:
, если вы переиграете задачу
если у вас проблемы с группой:
regexp: '^hello$'
replace: 'tag:\nhello'
хорошо, нет, когда я удаляю двоеточие, он все равно выдает эту ошибку
у меня нет ошибки, так что .... покажите, что вы написали ...
Ммм, похоже, проблема с \1
да, я заменил: 'tag:\n\1', когда я удаляю \1, он работает
у вас старая версия ansible? в любом случае вы можете избежать группы, см. Мой ответ изменен
нет, я использую новейшую версию (ansible-core 2.12). Ваше дополнение, к сожалению, не помогает, потому что строка, содержащая «привет», всегда немного отличается
у меня такая же версия, но проблема с версией python?
3.9 так еще и новейшая
не понимаю... docs.ansible.com/ansible/latest/collections/ansible/builtin/… в образце мы могли видеть \1 как группу....
Я нашел, что я сделал неправильно (спасибо, что запретил мне, потому что я не знаю, как работают эти обратные ссылки). Я не помещал свое регулярное выражение в группу.
Спасибо за ваш ответ, к сожалению, это выдает ошибку «re.error: недопустимая ссылка на группу 1 в позиции 7», поэтому я думаю, что у нее проблема с «:». Реиграбельность не проблема, я вытаскиваю конфиг в начале моего playboob, но приятно знать, спасибо