我想删除一个文件,看起来像这样一行:问题与山狮sed
测试1800在CNAME mydomain.com。
我在Mountain Lion上使用sed,我尝试了以下方法,但是我一直没有收到任何错误,但是行并未被删除。
sed -i -e '/$regex/d' $file
或
sed -i "" -e '/$regex/d' $file
凡$正则表达式是包含行提及上方和$文件表达式是其中线是该文件的名称。
任何帮助将不胜感激。
我想删除一个文件,看起来像这样一行:问题与山狮sed
测试1800在CNAME mydomain.com。
我在Mountain Lion上使用sed,我尝试了以下方法,但是我一直没有收到任何错误,但是行并未被删除。
sed -i -e '/$regex/d' $file
或
sed -i "" -e '/$regex/d' $file
凡$正则表达式是包含行提及上方和$文件表达式是其中线是该文件的名称。
任何帮助将不胜感激。
这是Sed command find and replace in file ...近重复,最便携的答案是一样的有:
sed -e '/$regex/d' $file >$file.tmp && mv $file.tmp $file
...的原因,并与优势,因为在那里。当你担心可移植性时,POSIX spec是一个很好的资源,因为它描述了unix命令的一个常见子集,它通常受到了令人沮丧的限制,但是它非常可靠地存在于所有可能遇到的unix中。
山狮(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";
?>
最有可能的问题很好,在我看来,是你有一个包含了模式的shell变量$regex
要搜索和已删除,但您的单引号会阻止shell扩展它。您可能需要使用:(对狮子和山狮BSD sed
支持-i
选项的手册页建议不要长度为零的备份扩展。)
sed -i .bak -e "/$regex/d" $file
-i extension
就地编辑文件,使用指定的扩展名保存备份。如果给出零长度扩展 ,则不会保存备份。不建议给予零长度延伸时 就地编辑文件,否则可能损坏或情况部分内容,其中磁盘 空间耗尽等
的可能重复[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
查看链接的帖子, -i不适用于BSD sed(OSX使用)。 – ismail 2013-03-12 20:21:35
Lion和Mountain Lion上的BSD'sed'有'-i'选项。 – 2013-04-17 04:03:48