опция sed -i не работает на солярисе - PullRequest
9 голосов
/ 08 ноября 2010

Я использую sed для замены строки с NULL в файле. Я использовал команду

sed -i "s/.*shayam.*//g" FILE

Это нормально работает в Linux. Шайам заменяется пустым в ФАЙЛЕ. Но когда я использовал это в солярисе, это показывает некоторую ошибку.

sed: недопустимый вариант - i

Как использовать -i функциональность sed в солярисе. Пожалуйста, помогите.

Ответы [ 4 ]

11 голосов
/ 30 ноября 2010

Я только что ответил на аналогичный вопрос sed -i +, что такое же значение в SOLARIS , но для тех, кто находит эту тему вместо этого (я видел ее в разделе соответствующей темы):

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

Это не совсем то же самое, что sed -i, но у меня была похожая проблема. Вы можно сделать это с помощью perl:

perl -pi -e 's/find/replace/g' file

выполнение копирования / перемещения работает только для отдельных файлов. если хотите заменить текст в каждом файле в каталоге и подкаталоги, вам нужно что-то, что делает это на месте. ты можешь сделать это с Perl и найти:

find . -exec perl -pi -e 's/find/replace/g' '{}' \;
11 голосов
/ 08 ноября 2010

Опция -i зависит от GNU.Версия Solaris не поддерживает эту опцию.

Вам потребуется установить версию GNU или переименовать новый файл поверх старого:

sed 's/.shayam.//g' FILE > FILE.new && mv FILE.new FILE
3 голосов
/ 08 ноября 2010

sed не имеет опции -i .

Вы, вероятно, используете какой-то конкретный для поставщика вариант sed. Если вы хотите использовать нестандартизированные расширения для конкретного поставщика вашего нестандартизированного варианта sed для конкретного поставщика, вам необходимо убедиться, что вы установили указанный нестандартизированный вариант для конкретного поставщика, и вам необходимо позвоните it и не называйте совместимую со стандартом версию sed, которая является частью вашей операционной среды.

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

В этом конкретном случае, однако, есть гораздо лучшее решение: использовать правильный инструмент для работы. sed - это редактор потоков (поэтому он называется"sed"), т. Е. Он предназначен для редактирования потоков, а не файлов. Если вы хотите редактировать файлы, используйте редактор файлов , например ed:

ed FILE <<-HERE
  ,s/.shayam.//g
  w
  q
HERE

Смотри также:

0 голосов
/ 08 ноября 2010

Либо cat файл или попробуйте <? Затем направьте (|) результат во временный файл, и, если все пойдет хорошо (&&) mv, временный файл в исходный файл.

Пример:

cat my_file | sed '!A!B!' > my_temp_file && mv my_temp_file my_file
...