如何从txt文件中删除特定行

Ins*_*420 4 command-line text-processing

我有一个将数据写入日志文件的 Bash 脚本,然后我从中取出我想要使用该sed命令的东西。这给了我一个文件data.txt。我想知道的是如何删除该data.txt文件中的特定行。

例如:

123
456
789
Run Code Online (Sandbox Code Playgroud)

我想删除第二行,包含456这样我只有

123

789
Run Code Online (Sandbox Code Playgroud)

我试过,sed '2d' data.txt但它不起作用。

我使用此命令data.txtlog.log以下位置创建:

sed -nE '1s/.{1}(.{2}).*/\1/p;' log.log >> data.txt
Run Code Online (Sandbox Code Playgroud)

ran*_*ran 7

尝试这个。这应该有效。

sed -i '2d' data.txt
Run Code Online (Sandbox Code Playgroud)

-i除非您将输出重定向到新文件,否则您必须使用 sed 命令添加标志。如果不添加-i标志,sed 会将模式空间打印到 STDOUT 并且不会对原始文​​件进行任何更改。

自动备份选项

在没有正确备份的情况下修改文件是非常危险的。所以 sed 有它的本地方法来在编辑之前备份文件,这是-i.bak选项。

所以在上面的例子中,如果我们使用备份选项,命令就是。

sed -i.bak '2d' data.txt
Run Code Online (Sandbox Code Playgroud)

因此,它将从文件 data.txt 中删除第一行,并且还将使用.bak扩展名制作原始文件的备份副本。


JoL*_*JoL 6

您知道,除了按行号指定之外,您还可以通过匹配行的内容来实现,如果这更有用的话(听起来可能):

sed -i '/^456$/d' data.txt
Run Code Online (Sandbox Code Playgroud)