我有以下代码用于在文件中查找字符串,然后删除包含该字符串的行。
echo `sed /$string/d file.txt` > file.txt
问题是如果最初file.txt包含:
a
b
c
删除“a”(string = a)后,file.txt将变为
b c
而不是
b
c
任何人都可以帮助我吗?
答案 0 :(得分:6)
这是因为反击。这样做:
sed -i /$string/d file.txt
注意,如果您要就地执行此操作,则需要使用-i
至sed
,因为>
会在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