三剑客之sed

Posted yjiu1990

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了三剑客之sed相关的知识,希望对你有一定的参考价值。

三剑客之sed

sed的执行过程

#条件满足
sed命令先将第一行内容读取到内存中-->判断这一行是否满足条件--->满足-->执行sed中的命令(s,d,i)-->输出到屏幕-->继续读取下一行直到文件最后
#条件不满足
sed命令先将第一行内容读取到内存中-->判断这一行是否满足条件--->不满足-->返回继续读取文件的内容

sed命令的用法

-n:取消默认输出
-r:使sed支持扩展正则(| ())
-i:确认修改
-i.bak:自动备份

sed命令之查询

#查询单行
[[email protected] oldboy]# sed -n ‘1p‘ person.txt 
101,oldboy,CEO
#查询连续行
[[email protected] oldboy]# sed -n ‘1,3p‘ person.txt 
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,COO
#查询多行
[[email protected] oldboy]# sed -n ‘2p;5p‘ person.txt 
102,zhangyao,CTO
105,feixue,CIO
#模糊查询
[[email protected] oldboy]# sed -n ‘/yy/,/^105/p‘ person.txt 
104,yy,CFO
105,feixue,CIO
#过虑多个字符串,使用-r来支持扩展正则
[[email protected] oldboy]# sed -nr ‘/oldboy|yy/p‘ person.txt 
101,oldboy,CEO
104,yy,CFO

sed命令之增加文件

[[email protected] oldboy]# cat -A person.txt 
101,oldboy,CEO$
102,zhangyao,CTO$
103,Alex,COO$
104,yy,CFO$
105,feixue,CIO$
#a在什么之后增加单行
[[email protected] oldboy]# sed ‘3a oldboy.com‘ person.txt 
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,COO
oldboy.com
104,yy,CFO
105,feixue,CIO
#i:在什么之前增加单行
[[email protected] oldboy]# sed ‘3i oldboy.com‘ person.txt 
101,oldboy,CEO
102,zhangyao,CTO
oldboy.com
103,Alex,COO
104,yy,CFO
105,feixue,CIO
#增加多行
[[email protected] oldboy]# sed ‘4a odlboy
helloaaaa‘ person.txt 
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
odlboy
helloaaa
105,feixue,CIO

sed命令之删除

#删除单行
[[email protected] oldboy]# sed ‘1d‘ person.txt 
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
#删除连续行
[[email protected] oldboy]# sed ‘1,3d‘ person.txt 
104,yy,CFO
105,feixue,CIO
#删除多行
[[email protected] oldboy]# sed ‘1d;3d‘ person.txt 
102,zhangyao,CTO
104,yy,CFO
105,feixue,CIO
#使用过滤来删除
[[email protected] oldboy]# sed ‘/oldboy/d‘ person.txt 
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
#使用正则删除
[[email protected] oldboy]# sed -r ‘/oldboy|yy/d‘ person.txt 
102,zhangyao,CTO
103,Alex,COO
105,feixue,CIO
#删除最后一行,$表示最后一行
[[email protected] oldboy]# sed ‘$d‘ person.txt 
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
企业案例:不显示文件中的空行
[[email protected] oldboy]# cat -A person.txt 
101,oldboy,CEO$
$
102,zhangyao,CTO$
$
103,Alex,COO$
$
104,yy,CFO$
105,feixue,CIO$
#不显示空行,!表示取反
[[email protected] oldboy]# sed -n ‘/^$/!p‘ person.txt 
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
#删除除最后一行以后的内容
[[email protected] oldboy]# sed ‘$!d‘ person.txt 
105,feixue,CIO

sed命令之替换

#s表示替换,g表示全局替换
[[email protected] oldboy]# sed ‘s#oldboy#oldgirl#g‘ person.txt 
101,oldgirl,CEO

102,zhangyao,CTO

103,Alex,COO

104,yy,CFO
105,feixue,CIO
#i表示确认修改,i.bak表示自动备份
[[email protected] oldboy]# sed -i.bak ‘s#oldboy#oldgirl#g‘ person.txt 
[[email protected] oldboy]# ls
person.txt  person.txt.bak

sed命令之变量替换

[[email protected] oldboy]# x=oldboy
[[email protected] oldboy]# y=oldgril
#此处无变化是因为单引号与又引号的区别,单引号是所见所得,不会解析当中的特殊符号,双引号和单引号一样,但是会解析当中的特殊符号
[[email protected] oldboy]# sed ‘s#$x#$y#g‘ person.txt.bak 
101,oldboy,CEO

102,zhangyao,CTO

103,Alex,COO

104,yy,CFO
105,feixue,CIO
[[email protected] oldboy]# sed "s#$x#$y#g" person.txt.bak 
101,oldgril,CEO

102,zhangyao,CTO

103,Alex,COO

104,yy,CFO
105,feixue,CIO
[[email protected] oldboy]# 

sed命令之反向引用

()  扩展正则表达式  在sed中作用,能够记忆它包含的一段正则表达式,并可以通过1 2 3 ... 9 调取出来

以上是关于三剑客之sed的主要内容,如果未能解决你的问题,请参考以下文章

linux文本三剑客之sed命令详解

三剑客之sed

三剑客之SED行天下

文本处理三剑客之 sed

三剑客之sed

linux三剑客之sed入门详解