正常来说 , 我们想要删除文件中的某些行内容 , 一般都是先打开这个文件 , 然后找到要删除的内容 , 再然后选中这些行并按删除键进行删除 , 这在数据量很少时是没有问题的 。但是 , 一旦文件中的行数据非常多 , 而且数据冗杂的情况下 , 你还要用上面的方法去做的话就很恐怖了 。为此 , 今天这篇文章将带大家一起学习运用 sed 命令行工具 , 即使在数据多而杂的情况下也能高效而优雅地删除文件中的特定行内容 。
sed 是 Stream Editor 的简写 , 它用于在 linux 中进行基本的文本转换 , 是文件操作的一个重要命令 , 所以 , 我们也可以用它来实现文本的删除操作 。
【运用sed命令高效地删除文件的特定行】下面是一些 sed 命令的使用示例 , 覆盖了大多数的使用场景 , 由浅入深地帮助你学习 sed 命令 , 让你轻松地实现高效删除文件的特定行内容 。
首先我们准备一个演示文件 sed-demo.txt 。
# cat sed-demo.txt1 Linux Operating System2 Unix Operating System3 RHEL4 Red Hat5 Fedora6 Arch Linux7 centos8 Debian9 Ubuntu10 openSUSE
然后我们就可以运用 sed 命令进行实验了 。
注意:-i 表示直接进行文件操作 , 而不在终端上显示结果 。因为是演示所以这里不带 -i 选项 , 我们在实际中请带上 -i 选项 。1. 删除某一行首先 , 我们先从删除某一行开始 , 比如删除第一行、最后一行 , 实际也就是第 N 行嘛 。
删除第 N 行的命令格式:
sed 'Nd' file
我们来删除第一行试试:# sed '1d' sed-demo.txtAfter deletion:2 Unix Operating System3 RHEL4 Red Hat5 Fedora6 Arch Linux7 CentOS8 Debian9 Ubuntu10 openSUSE
很简单是吧?这里就不多作解释了 , 你想要删除第几行的内容只需要把命令中的 1 替换一下就 ok 了 。那问题来了 , 最后一行用什么数字表示呢?这里给大家一个小提示 , 可以用美元符号 $ 表示最后 , 所以删除最后一行的命令可以这么写:
# sed '$d' sed-demo.txtAfter deletion:1 Linux Operating System2 Unix Operating System3 RHEL4 Red Hat5 Fedora6 Arch Linux7 CentOS8 Debian9 Ubuntu
2. 删除某些行sed 命令可以删除连续又或者不连续的行内容 。删除连续的行 , 例如删除从 5 到 7 行 的内容:
# sed '5,7d' sed-demo.txtAfter deletion:1 Linux Operating System2 Unix Operating System3 RHEL4 Red Hat8 Debian9 Ubuntu10 openSUSE
删除不连续的行 , 例如删除第 1 、第 5 、第 9 和最后一行:# sed '1d;5d;9d;$d' sed-demo.txtAfter deletion:2 Unix Operating System3 RHEL4 Red Hat6 Arch Linux7 CentOS8 Debian
另外 , 它还可以配合逻辑非 ! 使用 , 比如删除第 3到 6 行以外的其他行:# sed '3,6!d' sed-demo.txtAfter deletion:3 RHEL4 Red Hat5 Fedora6 Arch Linux
3. 删除空白行sed 还支持删除文件的空白行 , 命令如下:# sed '/^$/d' sed-demo.txtAfter deletion:1 Linux Operating System2 Unix Operating System3 RHEL4 Red Hat5 Fedora6 Arch Linux7 CentOS8 Debian9 Ubuntu10 openSUSE
提示:这里两个斜杠 / / 内的表达式起到了文本匹配的作用 , 大家可以参考正则表达式的使用方法 。下面将列举一些常用的方法来加深大家的学习 。4. 删除包含特定字符的行假设我们想要删除示例文件中的包含 System 这个单词的行内容 , 我们可以用 /System/ , 它表示有出现 System 这个字符串就进行匹配 , 具体的命令如下:
# sed '/System/d' sed-demo.txtAfter deletion:3 RHEL4 Red Hat5 Fedora6 Arch Linux7 CentOS8 Debian9 Ubuntu10 openSUSE
不仅如此 , 我们还可以加上一下逻辑条件 , 比方说下面的命令:# sed '/System|Linux/d' sed-demo.txtAfter deletion:3 RHEL4 Red Hat5 Fedora7 CentOS8 Debian9 Ubuntu10 openSUSE
反斜杠 代表逻辑或 , 上述命令的意思是文本中有 System 或 Linux 的行都要进行删除 。5. 删除特定字符开头的行首先 , 我们创建另一个示例文件 sed-demo-1.txt 进行更好地演示 , 其内容如下:
推荐阅读
- linux编程yum 命令详解
- 黑客大神的Weblogic 远程命令执行漏洞分析
- MySQL 8.0 运维便捷命令
- ROS 的常用命令行工具
- Linux下mv命令高级用法
- 满庭芳蜗角功名运用了什么的句法
- sed 命令快速入门
- 篮球防守战术解析
- K8S常用命令
- Redis命令大全,满足你的日常工作,看这一篇就够了