File bash从文件中永久删除一行
我有以下代码用于在文件中查找字符串,然后删除包含该字符串的行File bash从文件中永久删除一行,file,sed,line,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 有人能帮我吗?这是因为回跳。改为这样做: sed -i /$string/d file.txt 注意,如果您想在适当的位置执行此操作,您需要使用-i来sed,因为将在sed读取文件之前销毁该文件。
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
来sed
,因为
将在sed
读取文件之前销毁该文件。您不需要回送
包裹,只需尝试:
sed -i '/a/d' file.txt
您需要引用命令的输出:
echo-n“
sed/$string/d file.txt
”>file.txtsed有一个就地编辑选项。在你的senario中使用它更合适。
e、 g
对于您案例中的问题,由于``的输出没有包含在双引号中,因此可以使用bash进行分词。并且新行被删除。
要在这种情况下使用echo,请执行以下操作:
echo "`sed /$string/d file.txt`" > file.txt
我们不应该先从正则表达式字符中转义
$string
吗?@Khaledvic:当然。如果$string
包含shell认为重要的字符,例如,则此方法也会出现问题代码>。基本上,如果$string
的内容未知,则需要小心地转义正则表达式和shell有效字符。谢谢你指出这一点。
echo "`sed /$string/d file.txt`" > file.txt