Ansible lineInFile вставить перед несколько раз

Я пробовал и искал, чтобы решить эту проблему, но ничего не подходило для моей проблемы.

Я использую ansible для получения конфигурации, и я хочу определенным образом манипулировать этой конфигурацией. Одна вещь, которую я хочу сделать, это добавить тег перед строкой с совпадением регулярного выражения, но на всех из них.

hello
something
something
hello
something
hello

должно быть:

tag:
hello
something
something
tag:
hello
something
tag:
hello

Я пытался использовать модуль lineinfile с опцией insertbefore, но этот добавляет тег только один раз к последнему совпадению. Я также пробовал цикл with_items, но мои параметры не меняются, я просто хочу, чтобы это было сделано для всех совпадений одного и того же регулярного выражения с добавлением одной и той же строки ранее.

Любые идеи, как я могу этого добиться?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
38
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

вы можете использовать модуль замены:

  - 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'

Спасибо за ваш ответ, к сожалению, это выдает ошибку «re.error: недопустимая ссылка на группу 1 в позиции 7», поэтому я думаю, что у нее проблема с «:». Реиграбельность не проблема, я вытаскиваю конфиг в начале моего playboob, но приятно знать, спасибо

morikules 17.03.2022 17:42

хорошо, нет, когда я удаляю двоеточие, он все равно выдает эту ошибку

morikules 17.03.2022 17:51

у меня нет ошибки, так что .... покажите, что вы написали ...

Frenchy 17.03.2022 17:52

Ммм, похоже, проблема с \1

morikules 17.03.2022 17:54

да, я заменил: 'tag:\n\1', когда я удаляю \1, он работает

morikules 17.03.2022 17:56

у вас старая версия ansible? в любом случае вы можете избежать группы, см. Мой ответ изменен

Frenchy 17.03.2022 17:57

нет, я использую новейшую версию (ansible-core 2.12). Ваше дополнение, к сожалению, не помогает, потому что строка, содержащая «привет», всегда немного отличается

morikules 17.03.2022 18:00

у меня такая же версия, но проблема с версией python?

Frenchy 17.03.2022 18:02

3.9 так еще и новейшая

morikules 17.03.2022 18:03

не понимаю... docs.ansible.com/ansible/latest/collections/ans‌​ible/builtin/… в образце мы могли видеть \1 как группу....

Frenchy 17.03.2022 18:05

Я нашел, что я сделал неправильно (спасибо, что запретил мне, потому что я не знаю, как работают эти обратные ссылки). Я не помещал свое регулярное выражение в группу.

morikules 17.03.2022 18:08

Другие вопросы по теме