如何从文件中删除包含特定字符串的行?

5

我有一个名为BookDB.txt的文件,以以下方式存储信息:

C++ for dummies:Jared:10.67:4:5
Java for dummies:David:10.45:3:6 
PHP for dummies:Sarah:10.47:2:7

假设在运行时,脚本要求用户输入他想要删除的标题。这个标题被存储在变量 TITLE 中。那么如何删除包含该字符串的行呢?我尝试了以下命令但没有成功:

sed '/$TITLE/' BookDB.txt >> /dev/null

1
你是否在寻找 grep -v "$TITLE" BookDB.txt - Cyrus
2个回答

8
您可以例如执行以下操作:
$ title="C++ for dummies"
$ sed -i "/$title/d" a
$ cat a
**Java for dummies**:David:10.45:3:6
**PHP for dummies**:Sarah:10.47:2:7

请注意以下几点:

  • 在sed中,需要使用双引号来展开变量。否则,它将寻找固定的字符串"$title"。
  • 使用-i可以实现就地替换,在sed执行之后文件将被更新。
  • d是指示sed删除匹配行的方式。

谢谢!运行得很好。-i 是我缺少的东西。 - Jared Aaron Loo
@JaredAaronLoo 不仅需要加上 -i,还需要添加双引号,否则它将无法工作。 - Avinash Raj
@AvinashRaj 在 OS X 上似乎是这样,但在 Ubuntu 上,如果使用“-i”“”,实际上不起作用,如果您正在编写应该在多个操作系统上工作的 shell 脚本,那么这并不方便... - gitaarik

4

你的命令应该是:

sed "/$TITLE/d" file

为保存更改,您需要添加-i内联编辑参数。

sed -i "/$TITLE/d" file

在sed中进行变量扩展,需要将代码放在双引号内。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接