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