bash永久删除文件中的一行

时间:2012-07-25 02:15:38

标签: file sed line

我有以下代码用于在文件中查找字符串,然后删除包含该字符串的行。

echo `sed  /$string/d  file.txt` > file.txt

问题是如果最初file.txt包含:

a
b
c

删除“a”(string = a)后,file.txt将变为

b c

而不是

b
c

任何人都可以帮助我吗?

4 个答案:

答案 0 :(得分:6)

这是因为反击。这样做:

sed -i /$string/d  file.txt

注意,如果您要就地执行此操作,则需要使用-ised,因为>会在sed读取之前销毁该文件。

答案 1 :(得分:3)

您不需要echo换行,只需尝试:

sed -i '/a/d' file.txt

答案 2 :(得分:2)

您需要引用命令的输出:

echo -n“sed /$string/d file.txt”> file.txt的

答案 3 :(得分:1)

sed有一个就地编辑选项。在你的服装中使用它更合适。 例如

sed -i /$string/d file.txt

对于你的情况的问题,因为``的输出没有用双引号括起来,所以用bash完成了单词拆分。并删除换行符。 要在这种情况下使用echo,请执行以下操作:

echo "`sed  /$string/d  file.txt`" > file.txt