2013-03-12 4 views
0

Я пытаюсь удалить строку в файл, который выглядит следующим образом:проблемы с СЭД на Mountain Lion

тест 1800 IN CNAME mydomain.com.

Я использую sed на Mountain Lion, и я пытаюсь выполнить следующее, но я не получаю ошибок, однако строка не удаляется.

sed -i -e '/$regex/d' $file 

или

sed -i "" -e '/$regex/d' $file 

Там, где $ регулярных выражений является выражение, содержащее упоминание строки выше и $ файла это имя файла, в котором находится строка.

Любая помощь Будет оценена.

+0

возможный дубликат [СЭД на месте флаг, который работает как на Mac, так и на Linux] (http://stackoverflow.com/questions/5694228/sed-in-place-flag-that-works-both-on-mac-and-linux) – ismail

+0

См. связанный пост, -i не будет работать с BSD sed (который использует OSX). – ismail

+0

BSD 'sed' на Lion и Mountain Lion имеет опцию' -i'. –

ответ

0

Это почти дубликат Sed command find and replace in file ..., и самый портативный ответ такой же, как есть:

sed -e '/$regex/d' $file >$file.tmp && mv $file.tmp $file 

... по причинам, и с преимуществами, приведенные там. Когда вы беспокоитесь о переносимости, POSIX spec - отличный ресурс, поскольку он описывает общее подмножество команд unix, которое часто разочаровывает, но которое довольно надежно присутствует во всех Unix, с которыми, вероятно, столкнется.

0

Mountain Lion (v10.8.2) прекрасно работает с sed -i "" -e '/$regex/d' $file

[Mar 12 17:22] [[email protected] ~]$ more test.php 
<?php 
echo "Test php echo 1"; 
echo "Test echo 2"; 
?> 
[Mar 12 17:22] [[email protected] ~]$ sed -i "" -e "/php/d" test.php 
[Mar 12 17:22] [[email protected] ~]$ more test.php 
echo "Test echo 2"; 
?> 
0

Скорее всего, проблема, как мне кажется, является то, что у вас есть переменная $regex оболочка, которая содержит образец для поиска и для но ваши одиночные кавычки не позволяют оболочке расширять ее. Скорее всего, вы должны использовать: (. BSD sed на Lion и Mountain Lion поддерживает опцию -i Страница руководства рекомендует продление нулевой длины резервного.)

sed -i .bak -e "/$regex/d" $file 

-i extension

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

Смежные вопросы