Как написать сценарий/форматировать файл YAML, чтобы добавить новую строку над элементами корневого уровня?

У меня есть файл YAML для конфигурации Ruby on Rails, отформатированный, как показано ниже.

default: &default
  api:
    my_id: test
    my_secret: test
development:
  <<: *default
  api:
    domain: some domain
  sso:
    url: some_url
qa:
  <<: *default
  api:

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

default: &default
  api:
    my_id: test
    my_secret: test

development:
  <<: *default
  api:
    domain: some domain
  sso:
    url: some_url

qa:
  <<: *default
  api:

Однако, когда я запускаю эту команду

perl -pi -e 's/^^[ ](.*)$/\n$1/g' yamlfile.yml

Он добавляет новую строку над каждой строкой, а не только над корневыми элементами. Каким будет правильный способ добавить такую ​​новую строку только над элементами верхнего уровня?

Вы имели в виду ^[^ ], что означает «начало строки + не пробел», вместо ^^[ ], что означает «начало строки + начало строки + пробел»?

TLP 22.04.2022 19:08
3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
0
1
53
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Это должно достичь того, что вы хотели:

perl -pi -e 's/^\S/\n$&/' yamlfile.yml

^^ является избыточным, а [ ] противоположно тому, что вы хотите сопоставить. Я думаю, вы имели в виду ^[^ ], что лучше, но вставляет строку вверху файла.

Решение:

perl -i -pe's/^(?=\S)/\n/ if $. != 1' yamlfile.yml

Решение, которое считывает весь файл сразу:

perl -i -0777pe's/\n\K(?=\S)/\n/g' yamlfile.yml

Ни один из вышеперечисленных способов не проверяет наличие пустой строки. С другой стороны, следующее нормализует пустые строки, предшествующие элементам верхнего уровня:

perl -i -0777pe's/^\n+//; s/\n\K\n*+(?=\S)/\n/g' yamlfile.yml

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