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 命令,可以查看命令手册。