Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
File bash从文件中永久删除一行_File_Sed_Line - Fatal编程技术网

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.txt

sed有一个就地编辑选项。在你的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