sed 是用于过滤和转换文本的流编辑器,功能很强大,以下可以从以下几个方面学习:
- 命令格式
- 内容查看
- 内容替换
- 内容增加
- 内容删除
sed是行编辑工具,所以是以行为单位。
一、命令格式
1、格式说明
- sed [参数] ‘<匹配条件> [动作]’ [文件名]
2、参数
- 参数为空 表示sed的操作效果,实际上不对文件进行编辑
- -n 取消静默输出
- -i 表示对文本进行编辑
3、匹配条件
匹配条件分为两种,分别为:数字行号和关键字匹配
- 数字行号格式 '行号'
- 关键字匹配格式 '/关键字/' 其中'/'隔离符号可以根据情况替换为@、#、!
4、动作
- a 在匹配到的内容下一行增加内容
- i 在匹配到的内容当前行增加内容
- d 删除匹配到的内容
- s 替换匹配到的内容
- p 查看指定内容
注意的是上面的动作应该在参数为-i的情况下使用,否则不会有效果。
二、实例说明
1、内容查看
- 文本内容
[root@localhost thrid_dir]# cat sed_example.txt aa AA aa BB cc CC
- 文本查看
# 不加-n会将内容先全部输出,然后再输出查找出来的内容 [root@localhost thrid_dir]# sed '3p' sed_example.txt aa AA aa BB cc CC cc CC # 加上-n取消静默输出,只输出匹配的内容 [root@localhost thrid_dir]# sed -n '3p' sed_example.txt cc CC # 输出2、3两行 [root@localhost thrid_dir]# sed -n '2,3p' sed_example.txt aa BB cc CC
2、内容替换
从三个方面说明:行号、列号、全体。
命令格式:
- sed -i [替换格式] [文件名]
其中替换格式的写法:'s###'--->'s#原内容##'--->'s#原内容#替换后内容#'
参考样式:
- sed -i '行号s#原内容#替换后内容#列号' [文件名]
- sed -i 's#原内容#替换后内容#g' [文件内容]
[root@localhost thrid_dir]# cat sed_example.txt aa AA aa BB cc CC # 整个文档替换 [root@localhost thrid_dir]# sed -i 's#aa#AA#' sed_example.txt [root@localhost thrid_dir]# cat sed_example.txt AA AA AA BB cc CC # 替换指定的行列 [root@localhost thrid_dir]# sed -i '1s#AA#aa#1' sed_example.txt [root@localhost thrid_dir]# cat sed_example.txt aa AA AA BB cc CC
3、内容增加
在指定行号的下一行增加内容,其格式如下:
- sed -i '行号a增加内容' [文件名]
当然,也可以在当前行增加内容,其格式如下:
- sed -i '行号i增加内容' [文件名]
如果增加多行,可以在行号位置写上范围值,中间以逗号隔开,如:sed -i '1,3a增加内容' [文件名]
# 原始文件 [root@localhost thrid_dir]# cat sed_example.txt aa AA aa BB cc CC # 第3行后增加内容 [root@localhost thrid_dir]# sed -i '3add DD' sed_example.txt [root@localhost thrid_dir]# cat sed_example.txt aa AA aa BB cc CC dd DD # 1-3每一行后增加内容 [root@localhost thrid_dir]# sed -i '1,3aadd test' sed_example.txt [root@localhost thrid_dir]# cat sed_example.txt aa AA add test aa BB add test cc CC add test dd DD # 正则匹配内容aa行后增加内容 [root@localhost thrid_dir]# sed -i '/aa/aadd test1' sed_example.txt [root@localhost thrid_dir]# cat sed_example.txt aa AA add test1 add test aa BB add test1 add test cc CC add test dd DD # 第一行前增加内容,其余的返回以及正则与上面等同 [root@localhost thrid_dir]# sed -i '1iadd before' sed_example.txt [root@localhost thrid_dir]# cat sed_example.txt add before aa AA add test1 add test aa BB add test1 add test cc CC add test dd DD
4、内容删除
指定行号进行删除,其格式如下:
- sed -i '行号d' [文件名]
如果多行范围删除,可以使用多行,中间以逗号隔开。
#文件内容 [root@localhost thrid_dir]# cat sed_example.txt aa AA aa BB cc CC dd DD ee EE ff FF #删除第3行 [root@localhost thrid_dir]# sed -i '3d' sed_example.txt [root@localhost thrid_dir]# cat sed_example.txt aa AA aa BB dd DD ee EE ff FF #正则匹配行删除 [root@localhost thrid_dir]# sed -i '/aa/d' sed_example.txt [root@localhost thrid_dir]# cat sed_example.txt dd DD ee EE ff FF #范围行删除 [root@localhost thrid_dir]# sed -i '1,2d' sed_example.txt [root@localhost thrid_dir]# cat sed_example.txt ff FF