2013-03-12 94 views
0

我想删除一个文件,看起来像这样一行:问题与山狮sed

测试1800在CNAME mydomain.com。

我在Mountain Lion上使用sed,我尝试了以下方法,但是我一直没有收到任何错误,但是行并未被删除。

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

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

凡$正则表达式是包含行提及上方和$文件表达式是其中线是该文件的名称。

任何帮助将不胜感激。

+0

的可能重复[sed的就地标志,在Mac和Linux上都可以](http://stackoverflow.com/questions/5694228/sed-in-place-flag-that-works-both-on-mac-and-linux) – ismail 2013-03-12 20:21:07

+0

查看链接的帖子, -i不适用于BSD sed(OSX使用)。 – ismail 2013-03-12 20:21:35

+0

Lion和Mountain Lion上的BSD'sed'有'-i'选项。 – 2013-04-17 04:03:48

回答

0

这是Sed command find and replace in file ...近重复,最便携的答案是一样的有:

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

...的原因,并与优势,因为在那里。当你担心可移植性时,POSIX spec是一个很好的资源,因为它描述了unix命令的一个常见子集,它通常受到了令人沮丧的限制,但是它非常可靠地存在于所有可能遇到的unix中。

0

山狮(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

最有可能的问题很好,在我看来,是你有一个包含了模式的shell变量$regex要搜索和已删除,但您的单引号会阻止shell扩展它。您可能需要使用:(对狮子和山狮BSD sed支持-i选项的手册页建议不要长度为零的备份扩展。)

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

-i extension

就地编辑文件,使用指定的扩展名保存备份。如果给出零长度扩展 ,则不会保存备份。不建议给予零长度延伸时 就地编辑文件,否则可能损坏或情况部分内容,其中磁盘 空间耗尽等