Заменить текст многострочным шаблоном

У меня есть шаблон в файле, который включает в себя новую строку:

client_encryption_options: enabled: false 

Я хочу установить значение true . Но enabled должен быть ниже client_encryption_options .

grep не позволяет мне искать многострочные. Как я могу это достичь?

  • sed диапазоны не всегда могут соответствовать только одной строке
  • Согласование и вставка в линию
  • Поиск строки, с успехом Поиск ближайшего шаблона
  • Sed Заменить в определенной группе позиций
  • Не удается перенаправить вывод из sed
  • команда sed unterminated `s
  • Удалите все числа, которые появляются до "="
  • как я могу прокомментировать / в разделе в исходном коде с sed или awk
  • 2 Solutions collect form web for “Заменить текст многострочным шаблоном”

    Ну, grep также не позволит вам вносить изменения, так что утилита не работает с самого начала.

    Вместо этого используйте GNU sed :

     $ sed '/^client_encryption_options:/,+1s/enabled:.*/enabled: true/' file 

    Это найдет строку, начинающуюся со строки client_encryption_options: и применит подстановку к ней и следующую строку. Подстановка заменит enabled: строку enabled: и все последующее за ней в той же строке с enabled: true .

    Подстановка будет применена к обеим строкам, но поскольку шаблон enabled:.* Не найден в первой строке, он останется неизменным. Вторая строка будет изменена безоговорочно (независимо от текста после enabled: .

    С sed :

     sed '/client_encryption_options:/{n;s/false/true/;}' 

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

    Linux и Unix - лучшая ОС в мире.