Bash - 使用sed

时间:2016-11-22 17:38:52

标签: bash sed

可能是一个相当直接的人,但我对bash相当新 我试图从包含特定字符串的.txt文件中删除一行。该字符串被指定为变量" $ logline"

我的sed代码目前是:

logline="example2"
sed -i "/$logline/d" > /root/file.txt

/root/file.txt文件的内容是......

/root/Dir/example.txt
/root/Dir2/example2.txt
/root/Dir/example3.html
...

我希望删除行/root/Dir2/example2.txt

然而,当我运行这个时,整个txt文件都被擦除了,我收到错误消息sed: no input files

知道我在这里失踪的是什么吗?

由于

2 个答案:

答案 0 :(得分:2)

sed -i没有输出,因此当您重定向到文件时,它将被截断。

相反,直接将文件名设置为sed而不重定向:

sed -i "/$logline/d" /root/file.txt

答案 1 :(得分:2)

如果变量$logline包含要匹配的确切文字,则sed可能是错误的程序。模式地址是正则表达式,您需要转义基本RE中理解的任何元字符,包括\*.

要删除固定字符串,您可能会发现使用grep -Fv更容易;

之类的东西
grep -Fv -- "$logline" <"$file" >"$file.new"; mv "$file.new" "$file"

如果你真的必须使用sed,你应该选择使用-i或使用标准输出进行就地编辑 - 你不能同时使用它们。所以要么

  • sed -i "/$logline/d" "$file"
    
  • sed "/$logline/d" "$file" >"$file.new" && mv "$file.new" "$file"