sed(流编辑器)是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换、删除、新增、选取等特定工作。
执行流程:从文件中读取一行,处理一行,再读取一行,再处理一行,如此反复,按行处理;sed默认匹配所有行。
主要参数:
-i 修改。
-n 取消默认输出 配合p使用。
-r 支持扩展正则表达式
Script:
1、a 追加(指定行的下一行追加内容)
2、i 插入(指定行的上一行插入内容)
3、d 删除
4、p 打印
5、c 用新行内容取代旧行内容
6、s 替换,搭配g全局替换
语法
语法 | 含义 |
10 {script} | 对指定行处理 |
10,20 {script} | 对第10到20行处理,包括第10,20行 |
10,+20 {script} | 对第10到30行处理,包括第10,30行 |
1~2 {script} | 对1,3,5等奇数行进行处理 |
10,$ {script} | 对第10行到最后一行尽心出力 |
/oldboy/ {script} | 对匹配oldboy的行进行处理 |
/oldboy/,/alex/ {script} | 对oldboy和alex之间的行进行处理 |
/oldboy/,${script} | 对oldboy到最后一行进行处理 |
1,/oldboy/ {script} | 对地一行到匹配oldboy的行进行处理 |
/oldboy/,+2 {script} | 对oldboy之后对两行进行处理 |
实例:
追加文本到指定行后
[root@oldboy ~]# sed ‘2a 106,dandan,CSO‘ person.txt
101,oldboy,CEO
102,zhangyao,CTO
106,dandan,CSO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
插入文本到指定行前
[root@oldboy ~]# sed ‘2i 106,dandan,CSO‘ person.txt
101,oldboy,CEO
106,dandan,CSO
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
多行追加
[root@oldboy ~]# sed ‘2a 106,dandan,CSO\n107,bingbing,CCO‘person.txt 通过\n元字符达到
101,oldboy,CEO
102,zhangyao,CTO
106,dandan,CSO
107,bingbing,CCO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
删除指定行
删除第二行
[root@oldboy ~]#sed ‘2d‘ person.txt
101,oldboy,CEO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
删除第2至5行
[root@oldboy ~]#sed ‘2,5d‘ person.txt
101,oldboy,CEO
删除第3行到最后一行
[root@oldboy ~]#sed ‘3,$d‘ person.txt
101,oldboy,CEO
102,zhangyao,CTO
删除包含"oldboy"的行
[root@oldboy ~]#sed ‘/oldboy/d‘ person.txt
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
取代
新行取代原来的行
将第二行内容取代为指定的内容
[root@oldboy ~]#sed ‘2c 106,dandan,CSO‘person.txt
101,oldboy,CEO
106,dandan,CSO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
替换
1、[root@oldboy ~]# sed‘s#zhangyao#oldboyedu#g‘ person.txt 将zhangyao更改oldboyedu
101,oldboy,CEO
102,oldboyedu,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
特殊符:& 代表被替换的内容
将1到3行的C替换为--C--
[root@oldboy ~]#sed ‘1,3s#C#--&--#g‘ person.txt &等于C
101,oldboy,--C--EO
102,zhangyao,--C--TO
103,yy,--C--OO
104,feixue,CFO
105,dandan,CIO
查询
查询第二行
[root@oldboy ~]#sed -n ‘2p‘ person.txt
102,zhangyao,CTO
第二行到第三行
[root@oldboy ~]#sed -n ‘2,3p‘ person.txt
102,zhangyao,CTO
103,Alex,COO
查询第1,3,5奇数行
[root@oldboy ~]#sed -n ‘1~2p‘ person.txt
101,oldboy,CEO
103,Alex,COO
105,feixue,CIO
查询包含CTO的行
[root@oldboy ~]#sed -n ‘/CTO/p‘ person.txt
102,zhangyao,CTO
查询从CTO到CFO之间的行
[root@oldboy ~]#sed -n ‘/CTO/,/CFO/p‘ person.txt
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
原文地址:http://xhdyw.blog.51cto.com/2891046/1786992