我有以下代码用于在文件中查找字符串,然后删除包含该字符串的行。
echo `sed /$string/d file.txt` > file.txt
问题是,如果最初 file.txt 包含:
a
b
c
删除 "a" (string=a) file.txt 后将变为
b c
代替
b
c
谁能帮我?
这是因为反引号。改为这样做:
sed -i /$string/d file.txt
请注意,如果您想就地执行此操作,您需要使用-i
to sed
as>
将销毁文件,然后sed
才能读取它。
您不需要echo
包装,只需尝试:
sed -i '/a/d' file.txt
您需要引用命令的输出:
回声 -n " sed /$string/d file.txt
" > 文件.txt
sed 有一个就地编辑选项。在你的场景中使用它更合适。例如
sed -i /$string/d file.txt
对于您的情况,由于 `` 的输出没有用双引号引起来,因此通过 bash 完成了分词。并且换行符被删除。要在这种情况下使用 echo,请执行以下操作:
echo "`sed /$string/d file.txt`" > file.txt