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

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

client_encryption_options: enabled: false 

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

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

  • Удалить строку с специальными символами
  • Разделение имен, разделенных символом «| характер "для отдельных пар
  • Греп от последнего появления шаблона к другому шаблону
  • Как совместить точную строку с помощью `sed`? Но не его часть.
  • Используя sed с herestring (<<<) и прочитайте -a
  • Прерывает ли sed поврежденный целевой файл?
  • Согласование нескольких шаблонов на одной строке
  • Чтобы удалить новые строки после пустой строки
  • 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 - лучшая ОС в мире.