вставьте новую строку с начальным пробелом, используя sed на osx

У меня есть файл yaml, который выглядит так:

:stuff:
  - text

В итоге мне нужно следующее:

:stuff:
  - text
  - moretext

Поскольку это yaml, он чувствителен к пробелам. Я пытался использовать sed, чтобы добавить новую строку с начальным пробелом, и могу сделать это с помощью gnu sed, но я все еще борюсь с osx sed.

Эти методы работают с gnu sed, но не с osx/bsd sed.

sed -i '/- text/a\ \ - moretext'
sed -i -e '/- text/{:a;n;/^$/!ba;i\ \ - moretext' -e '}'

Редактировать: я понимаю, что технически posix требует новой строки после \, но желательно, чтобы это можно было сделать в одной строке?


person philbert    schedule 30.07.2014    source источник


Ответы (1)


Попробуй это:

$ sed 's/- text/&\'$'\n''  - moretxt/' file
:stuff:
  - text
  - moretxt

Очевидно, что с awk было бы проще и переносимее, если бы вы могли использовать это:

$ awk '{print} sub(/- text/,"- moretxt")' file
:stuff:
  - text
  - moretxt
person Ed Morton    schedule 31.07.2014
comment
Спасибо, Эд. Немного повозился, но я приступил к работе (хотя и не sed). Некоторая другая важная информация, которую я упустил, заключалась в том, что я передавал аргумент как встроенный поставщик оболочки с vagrant, что требовало дополнительных кавычек вокруг аргумента, который вызывал проблемы. Мне пришлось переместить аргумент в сценарий, как в примере Митчелла здесь, и тогда это сработало. Ваше здоровье! github.com/mitchellh/vagrant/blob/ - person philbert; 31.07.2014
comment
Этот элегантный awk пример наконец заставил меня узнать об этом больше (после того, как я избегал его в течение многих лет). До свидания sed, наверное :D Спасибо :) При настройке примера для моих целей мне нужно было добавить пользовательскую строку после совпадения фиксированной строки, исходящей из переменной env, а не из регулярного выражения, поэтому я придумал это: awk -v ma="$match" '{print} index($0, ma) {print " appended line"}' file. Преимущество этого также в том, что нет необходимости совпадать с полной строкой выше. - person tlwhitec; 06.01.2021