三剑客-sed

1.sed命令概述说明:

字符流编辑工具(行编辑工具)

2.sed命令作用说明:

(1)擅长对行进行操作处理

(2)擅长将文件的信息进行修改调整/删除

3.sed具体功能

(1)文件中添加信息的能力(增)

(2)文件中删除信息的能力(删)

(3)文件中修改信息的能力(改)

(4)文件中查询信息的能力(查)

4.sed命令的语法格式

sed [OPTION]… {script-only-if-no-other-script} [input-file].

命令 [参数] {条件-处理} 处理文件

5.sed命令执行原理

命令执行原理

6.sed命令实践操作

创建测试环境

cat >shuai.txt<<EOF
101,zhaosan,CEO
102,zhangsi,CTO
103,Aboluo,COO
104,yy,CFO
105,fergouzi,CIO
EOF
(1)sed命令查询信息方法
a.根据文件的行号进行查询
#打印单行信息
[root@shuai ~]# sed -n  '2p' shuai.txt 
102,zhangsi,CTO
#打印第一行到第三行的信息
[root@shuai ~]# sed -n  '1,3p' shuai.txt 
101,zhaosan,CEO
102,zhangsi,CTO
103,Aboluo,COO
#打印第一行和第三行的信息
[root@shuai ~]# sed -n '1p;3p' shuai.txt 
101,zhaosan,CEO
103,Aboluo,COO

b.根据文件的内容进行查询

#将有zhaosan的打印出来
[root@shuai ~]# sed -n '/zhaosan/p' shuai.txt 
101,zhaosan,CEO
#将zhaosan到Aboluo的行打印出来(连续)
[root@shuai ~]# sed -n '/zhaosan/,/Aboluo/p' shuai.txt 
101,zhaosan,CEO
102,zhangsi,CTO
103,Aboluo,COO
#将zhaosan和Abolu的行打印出来(不连续)
[root@shuai ~]# sed -n '/zhaosan/p;/Aboluo/p' shuai.txt 
101,zhaosan,CEO
103,Aboluo,COO
(2)sed添加信息的方法
a.在文件的第一行添加信息
#在文件第一行添加:100,lisi,OOO
[root@shuai ~]# sed '1i100,lisi,OOO' shuai.txt 
100,lisi,OOO
101,zhaosan,CEO
102,zhangsi,CTO
103,Aboluo,COO
104,yy,CFO
105,fergouzi,CIO

b.在文件的最后一行添加信息

#在文件最后一行添加:106,wangqi,YOO
[root@shuai ~]# sed '$a106,wangqi,YOO' shuai.txt 
101,zhaosan,CEO
102,zhangsi,CTO
103,Aboluo,COO
104,yy,CFO
105,fergouzi,CIO
106,wangqi,YOO

c.在文件上下添加一行信息

#在第二行前和第三行后添加信息
[root@shuai ~]# sed  -e '2ioldboy.txt' -e '3aolddog.txt' shuai.txt 
101,zhaosan,CEO
oldboy.txt
102,zhangsi,CTO
103,Aboluo,COO
olddog.txt
104,yy,CFO
105,fergouzi,CIO

d.添加多行信息

#在文件结尾添加多行信息
[root@shuai ~]# sed '$adashazi\ndafengzi' shuai.txt 
101,zhaosan,CEO
102,zhangsi,CTO
103,Aboluo,COO
104,yy,CFO
105,fergouzi,CIO
dashazi
dafengzi
(3)sed命令删除信息方法
a.删除单行信息
#删除第三行信息
[root@shuai ~]# sed '3d' shuai.txt 
101,zhaosan,CEO
102,zhangsi,CTO
104,yy,CFO
105,fergouzi,CIO

b.删除多行信息

#删除第三行到第五行
[root@shuai ~]# sed '3,5d' shuai.txt 
101,zhaosan,CEO
102,zhangsi,CTO
#删除第三行和第五行
[root@shuai ~]# sed '3d;5d' shuai.txt 
101,zhaosan,CEO
102,zhangsi,CTO
104,yy,CFO
#删除有zhaosan的行
[root@shuai ~]# sed '/zhaosan/d' shuai.txt 
102,zhangsi,CTO
103,Aboluo,COO
104,yy,CFO
105,fergouzi,CIO

c.删除空行

[root@shuai ~]# sed  '/^$/d'  shuai.txt 
101,zhaosan,CEO
102,zhangsi,CTO
103,Aboluo,COO
104,yy,CFO
105,fergouzi,CIO
[root@shuai ~]# sed -n '/^$/!p'  shuai.txt 
101,zhaosan,CEO
102,zhangsi,CTO
103,Aboluo,COO
104,yy,CFO
105,fergouzi,CIO
(4)sed命令修改信息的方法

a.单个替换

#将zhaosan替换成dashazi
[root@shuai ~]# sed s#zhaosan#dashazi#g shuai.txt 
101,dashazi,CEO
102,zhangsi,CTO
103,Aboluo,COO
104,yy,CFO
105,fergouzi,CIO

b.修改文件并备份文件

[root@shuai ~]# sed -i.bak s#zhangsi#dafengzi#g shuai.txt
[root@shuai ~]# cat shuai.txt
101,zhaosan,CEO
102,dafengzi,CTO
103,Aboluo,COO
104,yy,CFO
105,fergouzi,CIO
[root@shuai ~]# ls
shuai.txt.bak shuai.txt

c.后向引用前项,取IP地址

[root@shuai ~]# ip a s eth0|sed -nr '3s#.*inet (.*)/24.*#\1#gp'
10.0.0.200

d.将第一行替换成dashazi

[root@shuai ~]# sed '1cdashazi' shuai.txt
dashazi
102,dafengzi,CTO
103,Aboluo,COO
104,yy,CFO
105,fergouzi,CIO

总结:sed命令指令信息

p print 输出信息

i insert 插入信息,在指定信息前边插入新的信息

a append 附加信息,在指定信息后边附加新的信息

d delete 删除

s substitute 替换信息

g 全局替换

c 替换修改一整行信息

7.sed命令的参数信息

-n 取消默认输出

-r 识别扩展正则

-i 真实编辑文件(将内存中的信息覆盖到磁盘中,放到所有参数后边)

-e 识别sed命令的多个指令

练习:将shuai.txt修改为shuai.jpg

环境准备

[root@shuai ~/shuai]# touch shuai{01..10}.txt
[root@shuai ~/shuai]# ls
shuai01.txt  shuai03.txt  shuai05.txt  shuai07.txt  shuai09.txt
shuai02.txt  shuai04.txt  shuai06.txt  shuai08.txt  shuai10.txt

解答

[root@shuai ~/shuai]# ls shuai* |sed -r 's#(.*).txt# mv & \1.jpg#g'
 mv shuai01.txt shuai01.jpg
 mv shuai02.txt shuai02.jpg
 mv shuai03.txt shuai03.jpg
 mv shuai04.txt shuai04.jpg
 mv shuai05.txt shuai05.jpg
 mv shuai06.txt shuai06.jpg
 mv shuai07.txt shuai07.jpg
 mv shuai08.txt shuai08.jpg
 mv shuai09.txt shuai09.jpg
 mv shuai10.txt shuai10.jpg
[root@shuai ~/shuai]# ls shuai* |sed -r 's#(.*).txt# mv & \1.jpg#g' |bash
[root@shuai ~/shuai]# ls
shuai01.jpg  shuai03.jpg  shuai05.jpg  shuai07.jpg  shuai09.jpg
shuai02.jpg  shuai04.jpg  shuai06.jpg  shuai08.jpg  shuai10.jpg
​
[root@shuai ~/shuai]# rename .jpg  .txt shuai*
[root@shuai ~/shuai]# ls
shuai01.txt  shuai03.txt  shuai05.txt  shuai07.txt  shuai09.txt
shuai02.txt  shuai04.txt  shuai06.txt  shuai08.txt  shuai10.txt
posted @ 2021-05-14 11:04  张福帅  阅读(87)  评论(0)    收藏  举报