我正在尝试删除文件中的一行,如下所示:
在 CNAME mydomain.com 中测试 1800。
我在 Mountain Lion 上使用 sed 并且我正在尝试以下操作,但我一直没有收到任何错误,但是该行没有被删除。
sed -i -e '/$regex/d' $file
或者
sed -i "" -e '/$regex/d' $file
$regex 是包含上述行的表达式,$file 是该行所在文件的名称。
任何帮助将不胜感激。
这是Sed 命令 find and replace in file ...的几乎重复,最便携的答案与那里相同:
sed -e '/$regex/d' $file >$file.tmp && mv $file.tmp $file
...因为那里给出的原因和优势。当您担心可移植性时,POSIX 规范是一个很好的资源,因为它描述了一个常见的 unix 命令子集,这些命令通常受到令人沮丧的限制,但它非常可靠地存在于所有可能遇到的 unix 中。
在我看来,最可能的问题是你有一个 shell 变量$regex
,其中包含要搜索和删除的模式,但是你的单引号阻止了 shell 扩展它。您可能需要使用:
sed -i .bak -e "/$regex/d" $file
sed
( Lion 和 Mountain Lion 上的BSD支持该-i
选项。手册页建议不要使用零长度备份扩展。)
-i extension
就地编辑文件,以指定的扩展名保存备份。如果给出零长度扩展名,则不会保存备份。不建议在就地编辑文件时提供零长度扩展名,因为在磁盘空间耗尽等情况下,您可能会面临损坏或部分内容的风险。
Mountain Lion (v10.8.2) 适用于sed -i "" -e '/$regex/d' $file
[Mar 12 17:22] [jnovack@growlithe ~]$ more test.php
<?php
echo "Test php echo 1";
echo "Test echo 2";
?>
[Mar 12 17:22] [jnovack@growlithe ~]$ sed -i "" -e "/php/d" test.php
[Mar 12 17:22] [jnovack@growlithe ~]$ more test.php
echo "Test echo 2";
?>