Команда sed insert line 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, поэтому у меня есть пустой "как расширение".
Спасибо!
Ответы
Ответ 1
Вы должны поставить новую строку сразу после \
:
sed '3i\
text to insert' file
Это на самом деле поведение, определенное в спецификации POSIX. Тот факт, что GNU sed позволяет вам указывать текст, который будет вставлен в одну строку, является расширением.
Если по какой-либо причине вам необходимо использовать двойные кавычки вокруг команды sed, вы должны экранировать обратную косую черту в конце первой строки:
sed "3i\\
text to insert" file
Это связано с тем, что оболочка сначала обрабатывает строку в двойных кавычках, а удаляется \
, за которым следует символ новой строки:
$ echo "abc\
def"
abcdef
Ответ 2
В OSX вы можете использовать:
sed -i.bak '3i\
text to insert
' file
Ответ 3
Здесь, как это сделать в синтаксисе одной строки
sed -i '' -e "2s/^//p; 2s/^.*/text to insert/" file
Ответ 4
Это работает для меня
sed -i '' '3i\
text to insert' file
Ответ 5
Если вы хотите изменить файл определенного типа файла (.sh в моем случае), используйте эту команду.
sed -i '.sh' '3i\
mymodified text to insert' temp.sh
Убедитесь, что у вас есть разрыв строки после слэша ( "\" )
Ответ 6
Одна строка для OSX, использующая цитирование ANSI-C:
sed -i '' '3i\'$'\n''text to insert' file
Адаптировано из fooobar.com/info/146335/...