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.txt从log.log以下位置创建:
sed -nE '1s/.{1}(.{2}).*/\1/p;' log.log >> data.txt
Run Code Online (Sandbox Code Playgroud)
尝试这个。这应该有效。
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扩展名制作原始文件的备份副本。
您知道,除了按行号指定之外,您还可以通过匹配行的内容来实现,如果这更有用的话(听起来可能):
sed -i '/^456$/d' data.txt
Run Code Online (Sandbox Code Playgroud)