4

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

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

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

a
b
c

删除 "a" (string=a) file.txt 后将变为

b c

代替

b
c

谁能帮我?

4

4 回答 4

10

这是因为反引号。改为这样做:

sed -i /$string/d  file.txt

请注意,如果您想就地执行此操作,您需要使用-ito sedas>将销毁文件,然后sed才能读取它。

于 2012-07-25T02:20:48.333 回答
3

您不需要echo包装,只需尝试:

sed -i '/a/d' file.txt
于 2012-07-25T02:22:08.433 回答
2

您需要引用命令的输出:

回声 -n " sed /$string/d file.txt" > 文件.txt

于 2012-07-25T02:23:31.460 回答
1

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

sed -i /$string/d file.txt

对于您的情况,由于 `` 的输出没有用双引号引起来,因此通过 bash 完成了分词。并且换行符被删除。要在这种情况下使用 echo,请执行以下操作:

echo "`sed  /$string/d  file.txt`" > file.txt
于 2012-07-25T02:34:10.703 回答