0

我正在尝试删除文件中的一行,如下所示:

在 CNAME mydomain.com 中测试 1800。

我在 Mountain Lion 上使用 sed 并且我正在尝试以下操作,但我一直没有收到任何错误,但是该行没有被删除。

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

或者

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

$regex 是包含上述行的表达式,$file 是该行所在文件的名称。

任何帮助将不胜感激。

4

3 回答 3

0

这是Sed 命令 find and replace in file ...的几乎重复,最便携的答案与那里相同:

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

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

于 2013-03-12T20:58:54.790 回答
0

在我看来,最可能的问题是你有一个 shell 变量$regex,其中包含要搜索和删除的模式,但是你的单引号阻止了 shell 扩展它。您可能需要使用:

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

sed( Lion 和 Mountain Lion 上的BSD支持该-i选项。手册页建议不要使用零长度备份扩展。)

-i extension

就地编辑文件,以指定的扩展名保存备份。如果给出零长度扩展名,则不会保存备份。不建议在就地编辑文件时提供零长度扩展名,因为在磁盘空间耗尽等情况下,您可能会面临损坏或部分内容的风险。

于 2013-04-17T04:07:00.503 回答
0

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";
?>
于 2013-03-12T21:24:54.943 回答