sed 命令指的是”Stream EDitor”,用来实现 Linux 系统基本的文本转换。

sed 命令是 Linux 系统非常重要的命令之一,在文件处理中扮演着重要角色。主要的应用场景包含如下方面:

  • 根据给定参数删除特定的匹配行
  • 删除文件的特定行
  • 根据正则表达式结果删除对应行

本文将举例演示 sed 命令,来帮助大家掌握该命令的使用。充分了解 sed 命令后,可以极大的方便系统管理工作。

注释:由于是示例操作,演示 sed 命令时将不使用 -i 参数(这个参数指直接执行),也就是只显示执行结果而不对文件本身进行修改。

当在正式环境使用 sed 命令进行文件修改时,需要添加 -i 参数,这样才能让对文件修改生效。

演示起见,首先创建一个”sed-demo.txt”,内容如下:

1 Linux Operating System
2 Unix Operating System
3 RHEL
4 Red Hat
5 Fedora
6 Arch Linux
7 CentOS
8 Debian
9 Ubuntu
10 openSUSE

1] 使用 sed 命令删除文件特定位置的行

删除文件的特定行:

# sed 'Nd' file

其中:N 指文件的第 N 行,d 指删除该行;file 则指需要操作的文件名。

对于 sed-dome.txt 文件,如果想要删除第一行,则可以使用如下命令:

# sed '1d' sed-demo.txt

图.1 使用 sed 命令删除文件特定行

想要删除文件的最后一行,则使用”$”即可。sed 表达式还支持多行及范围删除和保留,示例如下:

# sed '$d' sed-demo.txt            //删除文件的最后一行
# sed '1d;$d' sed-demo.txt         //删除文件的首行和末行
# sed '1d;5d;9d;$d' sed-demo.txt   //删除文件的指定行,示例是删除1、5、9和尾行
# sed '5,7d' sed-demo.txt          //删除文件指定范围的行,示例是删除5到7行
# sed '3,6!d' sed-demo.txt         //删除文件非指定范围的行,示例是保留3到6行
# sed '/^$/d' sed-demo.txt         //删除匹配正则表达式的行,示例是删除空白行

2] 使用 sed 命令删除匹配行

从上面的示例中可以看到,sed 命令的文件表达式是支持正则的,所以可以设置条件来删除匹配的行:

sed '/System/d' sed-demo.txt

图.2 使用 sed 命令删除匹配条件行

可以看到,执行命令后会删除包含”System”字符串的行。

事实上 sed 命令的条件表达式可以理解为一个正常规则表达式,sed 命令会根据正则规则来匹配并完成相应的操作。熟悉正则表达式的话,就可轻松完成文件的批量处理。

以下是一些常用的正则规则:

# sed '/System\|Linux/d' sed-demo.txt        //删除文件包含 System 和 Linux 的行
# sed '/^R/d' sed-demo.txt                   //删除文件所有以 R 开头的行
# sed '/^[RF]/d' sed-demo.txt                //删除文件所有以 R 和 F开头的行
# sed '/m$/d' sed-demo.txt                   //删除文件以 m 结尾的行
# sed '/^(L).*(System)/d' sed-demo.txt       //删除文件所有以 R 并且以 System 结尾的行
# sed '/[xm]$/d' sed-demo.txt                //删除文件以 m 或 x 结尾的行
# sed '/^[A-Z]/d' sed-demo.txt               //删除文件以 A-Z 开头的行
# sed '1,6{/Linux/d;}' sed-demo.txt          //删除文件1-6行包含 Linux 字符串的行
# sed '/[0-9]/d' sed-demo.txt                //删除文件包含0-9数字的行
# sed '/^[0-9]/d' sed-demo.txt               //删除文件以0-9数据开头的行
# sed '/[A-Za-z]/d' sed-demo.txt             //删除文件以大小写字母开头的行

以上就是一些常用的 sed 命令匹配规则演示,希望对大家理解和使用 sed 命令有所帮助。如果希望更加深的了解 sed 命令,可以查看命令手册。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注