发布于 

sed工具使用教程

介绍

Sed Stream Editor(字符流编辑器)的缩写,简称流编辑器;

Sed是操作、过滤、转换文本内容的强大工具;

语法

sed  [选项]  [sed内置命令字符]  [输入文件]

1、选项参数

选项参数 介绍
-n 取消默认sed输出,常与sed内置命令p一起使用
-i 直接将修改结果写入文件,不用 - i,sed修改的是内存的数据
-e 多次编辑,不需要管道符
-f 支持正则扩展

2、内置命令字符

用于对文件进行不同的操作功能,比如对文件的增删改查,常用内置命令字符如下

命令字符 介绍
a append,对文本追加,在指定行后面添加一行或多行文本
d delete,删除匹配行
i insert,插入文本,在指定行之前添加一行或者多行文本
p print,打印指定行内容
s/正则/替换内容/g 匹配正则内容,然后替换内容,g表示全局替换

3、匹配范围

范围 介绍
空地址 全文处理
单地址 指定文件某一行
-pattern 被模式匹配到得每一行
范围区间 5,10,五到十行,10,+5,第10行向下5行,/pattern1/,/pattern2/
步长 12,表示,1、3、5、7、9行,22两个步长,表示2、4、6、8、10偶数行

实例

1、准备一个文件

[root@blog test]# vim test.txt

my name is tom
i like go
i like java
my phone is 123
my QQ is 312

2、文本过滤

过滤含有go的行

使用sed可以实现按照特定字符过滤的效果,需要把过滤的内容放到双斜杠 // 里面

[root@blog test]# sed -n '/go/p' test.txt 
i like go

输出文件第2、3行内容

[root@blog test]# sed -n '2,3p' test.txt 
i like go
i like java

3、文本内容删除

删除包含Java的行

考察对 -d 的使用,需要注意的是,使用sed 对文件进行修改的时候,要加 -i 参数,否则只修改内存模式的数据

[root@blog test]# sed '/java/d' test.txt -i
[root@blog test]# cat test.txt 
my name is tom
i like go
my phone is 123
my QQ is 312

删除第2、3行的数据

[root@blog test]# sed '2,3d' test.txt -i
[root@blog test]# cat test.txt 
my name is tom
my QQ is 312

删除第5行及之后的数据

[root@blog test]# sed '5,$d' test.txt -i

4、文本内容替换

s为内置符,配合g,代表全局替换,中间的“/”可以替换为“#@”
将文件中的my换成his

[root@blog test]# sed 's/my/his/g' test.txt -i
[root@blog test]# cat test.txt 
his name is tom
i like go
i like java
his phone is 123

替换所有i为he,并替换电话号为999

sed 可以通过 -e 进行多次替换

[root@blog test]# sed -e 's/i/he/g' -e 's/123/999/g' test.txt -i
[root@blog test]# cat test.txt 
hhes name hes tom
he lheke go
he lheke java
hhes phone hes 999

替换带特殊字符的文本

替换阿里云zabbix源

sed -i 's#http://repo.zabbix.com#https://mirrors.aliyun.com/zabbix#' /etc/yum.repos.d/zabbix.repo

5、文本插入和追加

在第二行内容后面添加一行内容

[root@blog test]# sed '2a his golang is good' test.txt -i
[root@blog test]# cat test.txt 
hhes name hes tom
he lheke go
his golang is good
he lheke java
hhes phone hes 999

在第三行后面添加多行内容

[root@blog test]# sed '3a his java is good \nhis python is good' test.txt -i
[root@blog test]# cat test.txt 
hhes name hes tom
he lheke go
his golang is good
his java is good 
his python is good
he lheke java
hhes phone hes 999

在第三行前面添加内容

[root@blog test]# sed '2i his golang is good' test.txt -i