DANic
@DANic
Интроверт

Как помощью Ansible модуля lineinfile, заменить первое совпадение после заданной строки?

Здраствуйте.
Подскажите можно ли с помощью Ansible модуля lineinfile, заменить первое совпадение после заданной строки и как?
Есть например такой файл

[abc]
enabled=0
[abc-1]
enabled=0
[abc-2]
enabled=0
[abc-test]
enabled=0
[abc-debuginfo]
enabled=0


Нужно заменить Enabled=0 на Enabled=1 только после [abc] и [abc-2],

пробовал так

- lineinfile: dest=/path/to/file regexp="^Enabled=" insertafter="^\[abc\]" line="Enabled=1"
- lineinfile: dest=/path/to/file regexp="^Enabled=" insertafter="^\[abc-2\]" line="Enabled=1"


но замена идет только последнего Enabled, я так понимаю что insertafter/insertbefore обрабатывается если regexp не нашел совпадений.

UPD Пока решил задачу так
- command: "sed -i '/^\[abc\]/,/\[.*\]/ { s/^enabled=.*/enabled=1/g }; /^\[abc-2\]]/,/\[.*\]/ { s/^enabled=.*/enabled=1/g }'  /path/to/file"

Возможно есть более правильное/красивое решение, я его пока не нашел.
  • Вопрос задан
  • 1821 просмотр
Пригласить эксперта
Ответы на вопрос 2
opium
@opium
Просто люблю качественно работать
судя по всему вы пытаетесь включить репозиторий, для этого есть стандартный команды,а не какой то там инлайнфайл
Ответ написан
@xtreme
Снимаю порчу по SSH :)
Один таск - один модуль.
Если в одном таске напишешь два модуля - исполняется только последний.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы