sed вставить строку команды OSX

Я пытаюсь вставить текст в третью строку файла с помощью sed, и синтаксис, который я нашел на других форумах:

sed -i '' "3i text to insert" file

однако, когда я использую это, я получаю сообщение об ошибке:

sed: 1: "3i text to insert": extra characters after  at the end of i command

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

спасибо!

5 ответов


вы должны поставить новую строку сразу после \:

sed '3i\
text to insert' file

это фактически поведение, определенное спецификация POSIX. Тот факт, что GNU sed позволяет указать текст, который будет вставлен в ту же строку, является расширением.


на OSX вы можете использовать:

sed -i.bak '3i\
text to insert
' file

вот как это сделать в одной строке синтаксиса

sed -i '' -e "2s/^//p; 2s/^.*/text to insert/" file
  • дублировать вторую строку: 2s/^//p;

  • заменить новую строку с текстом: 2s/^.*/text to insert/


это работает для меня

sed -i '' '3i\
text to insert' file 

Если вы хотите изменить файл определенного типа(.sh в моем случае) используйте эту команду.

sed -i '.sh' '3i\
mymodified text to insert' temp.sh

убедитесь, что у вас есть разрыв строки после косой черты ("\")