2010-11-08 3 views
9

Я использую sed, чтобы заменить строку NULL в файле. Используемая команда:sed -i опция не работает на solaris

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

Это прекрасно работает в Linux. shayam заменяется пустым в FILE. Но когда я использовал это в Solaris, он обнаружил некоторую ошибку.

СЭД: недопустимый вариант - я

Как использовать -i функциональность СЭД в Солярис. Незлая помощь.

ответ

11

-i вариант ГНУ-специфичны. Версия Solaris не поддерживает эту опцию.

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

sed 's/.shayam.//g' FILE > FILE.new && mv FILE.new FILE 
+0

Использование Mktemp помогает гарантировать, что мы не ненароком наступите на любые файлы с именем FILE.new ... TMP = $ (Mktemp) && СЕПГ -e 's /.* shayam. * // g' FILE> "$ tmp" && mv "$ tmp" FILE; rm "$ tmp" 2>/dev/null –

0

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

Пример:

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

sed doesn't haven an -i option.

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

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

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

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

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

11

Я просто ответил на аналогичный вопрос sed -i + what the same option in SOLARIS, но для тех, кто находит эту тему вместо этого (я видел это в связанная секция):

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

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

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

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

find . -exec perl -pi -e 's/find/replace/g' '{}' \; 
Смежные вопросы