第十章 文本处理三剑客之SED

138 阅读3分钟

@[TOC](第十章 文本处理三剑客之SED)

实验一:sed命令实现⽂本处理

⽬的

熟练使用sed命令完成文本处理。

前提

linux系统,centos6、centos7或ubuntu,连接网络。

【例1】利⽤sed 取出ifconfig ens33命令中本机的IPv4地址

[root@Magedu ~]# ifconfig ens33 |sed -r '2!d; s@(.*inet )(.*)( netmask.*)@\2@'

【例2】删除/etc/fstab⽂件中所有以#开头,后⾯⾄少跟⼀个空⽩字符的⾏的⾏⾸的#和空⽩字符

[root@Magedu ~]# sed -r 's/^#[[:blank:]]+//' /etc/fstab

【例3】把/etc/httpd/conf/httpd.conf⽂件内的Linsten 80改为Listen 8081

[root@Magedu ~]# sed -r 's/Listen 80/Listen 8081/' /etc/httpd/conf/httpd.conf

【例4】把pets⽂件中所有的dog修改为cat

[root@magedu ~]# cat pets
1 dog
2 cat
3 dog
4 cat
[root@magedu ~]# cat pets|sed 's/dog/cat/g'
1 cat
2 cat
3 cat
4 cat
[root@magedu ~]# cat pets 
1 dog
2 cat
3 dog
4 cat

注意:此处的修改仅是显⽰在屏幕输出了,实际⽂件内容并没有修改。 【例5】删除pets⽂件中的第2⾏

[root@magedu ~]# cat pets|sed '2d'
1 dog
3 dog
4 cat

【例6】仅显⽰pets⽂件的第2⾏

[root@magedu ~]# sed -n '2p' pets
2 cat

【例7】把pets⽂件的第2⾏显⽰2遍

[root@magedu ~]# sed '2p' pets
1 dog
2 cat
2 cat
3 dog
4 cat

【例8】显⽰pets⽂件的最后1⾏

[root@magedu ~]# sed -n '$p' pets
4 cat

【例9】显⽰pets⽂件中包含dog字符串的所有的⾏

[root@magedu ~]# sed -n '/dog/p' pets 
1 dog
3 dog

【例10】显⽰pets⽂件中,包含2或4的⾏之间的所有⾏

[root@magedu ~]# sed -n '/2/,/4/p' pets 
2 cat
3 dog
4 cat

【例11】显⽰pets⽂件中,第1⾏到第3⾏之间的所有⾏

[root@magedu ~]# sed -n '1,3p' pets 
1 dog
2 cat
3 dog

【例12】显⽰pets⽂件中第2⾏及后⾯的1⾏

[root@magedu ~]# sed -n '2,+1p' pets 
2 cat
3 dog

【例13】显⽰pets⽂件中第1⾏和dog字符串之间的⾏

[root@magedu ~]# sed -n '1,/dog/p' pets 
1 dog
2 cat
3 dog

【例14】显⽰pets⽂件的奇数⾏

[root@magedu ~]# sed -n '1~2p' pets 
1 dog
3 dog

【例15】显⽰pets⽂件的偶数⾏

[root@magedu ~]# sed -n '2~2p' pets 
2 cat
4 cat

【例16】在pets⽂件的第2⾏的下⼀⾏添加hello

[root@magedu ~]# sed '2ahello' pets
1 dog
2 cat
hello
3 dog
4 cat

【例17】在pets⽂件的第2⾏的下⼀⾏添加2⾏内容为helo和world

[root@magedu ~]# sed '2a\hello\nworld' pets
1 dog
2 cat
hello
world
3 dog
4 cat

【例18】在pets⽂件的第2⾏的前⼀⾏添加2⾏内容为helo和world

[root@magedu ~]# sed '2i\hello\nworld' pets
1 dog
hello
world
2 cat
3 dog
4 cat

【例19】把pets⽂件的第2⾏替换为hello

[root@magedu ~]# sed '2c\hello' pets
1 dog
hello
3 dog
4 cat

【例20】把pets⽂件的第1-3⾏内容,另存为test.txt⽂件

[root@magedu ~]# cat pets |sed '1,3w test.txt'
1 dog
2 cat
3 dog
4 cat
[root@magedu ~]# cat test.txt 
1 dog
2 cat
3 dog

【例21】在第2⾏后读⼊test.txt⽂件

[root@magedu ~]# seq 1 5|sed '2r test.txt'
1
2
1 dog
2 cat
3 dog
3
4
5

【例22】不显⽰第2⾏

[root@magedu ~]# seq 1 5|sed -n '2!p'
1
3
4
5

【例23】把pets⽂件中的每⾏内容前都编序号显⽰

[root@magedu ~]# sed "=" pets 
1
1 dog
2
2 cat
3
3 dog
4
4 cat