热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

四位剑术高手:sed深入解析与实战应用

增删改查 进阶:模式空间与保持空间 把文件中所有的回车替换为空格 1.sed命令执行流程 分析,解决故障,问题的时候 执行流程 执行流程: 四个字 找谁干啥(条件命令) image.pn

增删改查

进阶:模式空间与保持空间 把文件中所有的回车替换为空格

1.sed命令执行流程

分析,解决故障,问题的时候
执行流程
执行流程: 四个字 找谁干啥(条件命令)
四剑客-sed
image.png

2.sed命令查找

p-print 显示/打印
四剑客-sed
image.png
#案例01 显示第3行     固定行号 某一行  
101,oldboy,CEO
102,zhangya,CTO
103,李导996,COO
104,yy,CFO
105,feixue,CIO
110,lidao,COCO
119,huiling,CFO
[root@m01 /server/files]# sed -n '3p' sed.txt 
103,李导996,COO
[root@m01 /server/files]# 
#案例02 显示文件的第2到第5行     行号范围  
[root@m01 /server/files]# sed -n '2,5p' sed.txt
102,zhangya,CTO
103,李导996,COO
104,yy,CFO
105,feixue,CIO
[root@m01 /server/files]# 
#案例03 模糊查找   查找包含 oldboy 单词的行
grep 'oldboy'
[root@m01 /server/files]# sed -n '/oldboy/p' sed.txt 
101,oldboy,CEO
#案例04 模糊查找 使用正则匹配  
[root@m01 /server/files]# sed -nr '/oldboy|lidao/p' sed.txt 
101,oldboy,CEO
110,lidao,COCO
#案例05 模糊查找, 范围 匹配 从包含103的行 到匹配119的行
[root@m01 /server/files]# sed -n   '/103/,/119/p' sed.txt 
103,李导996,COO
104,yy,CFO
105,feixue,CIO
110,lidao,COCO
119,huiling,CFO
[root@m01 /server/files]# #sed -n   '/从哪里来/,/到哪里去/p' sed.txt 

#取出 日志中 11:02 到 11:30日志
#sed -n '//,//p' access.log 
sed -n '/11:02:00/,/11:30:00/p' access.log |less 
#案例06   实现 grep -A功能 了解
grep -A  5     oldboy   oldboy.txt 
[root@m01 /server/files]# cat sed.txt 
101,oldboy,CEO
102,zhangya,CTO
103,李导996,COO
104,yy,CFO
105,feixue,CIO
110,lidao,COCO
119,huiling,CFO
[root@m01 /server/files]# sed -n '3,+5p'   sed.txt 
103,李导996,COO
104,yy,CFO
105,feixue,CIO
110,lidao,COCO
119,huiling,CFO
[root@m01 /server/files]# sed -n '/oldboy/,+5p'   sed.txt 
[root@m01 /server/files]# sed -n '/oldboy/,+5p'   sed.txt 
101,oldboy,CEO
102,zhangya,CTO
103,李导996,COO
104,yy,CFO
105,feixue,CIO
110,lidao,COCO
#案例07 实现有规律的 匹配多行 了解
[root@m01 /server/files]# seq 10 |sed -n '1~2p'
1
3
5
7
9
[root@m01 /server/files]# seq 10 |sed -n '2~2p'
2
4
6
8
10
#案例08 排除   oldboy行排除掉
[root@m01 /server/files]# sed -n '/oldboy/p' sed.txt 
101,oldboy,CEO
[root@m01 /server/files]# sed -n '/oldboy/!p' sed.txt 
102,zhangya,CTO
103,李导996,COO
104,yy,CFO
105,feixue,CIO
110,lidao,COCO
119,huiling,CFO
[root@m01 /server/files]# sed '/oldboy/d' sed.txt 
102,zhangya,CTO
103,李导996,COO
104,yy,CFO
105,feixue,CIO
110,lidao,COCO
119,huiling,CFO

3.删除

d—delete
四剑客-sed
image.png
# 案例01 
[root@m01 /server/files]# sed '/oldboy/d' sed.txt 
102,zhangya,CTO
103,李导996,COO
104,yy,CFO
105,feixue,CIO
110,lidao,COCO
119,huiling,CFO
# 案例02 删除/显示最后一行
[root@m01 /server/files]# sed '1d' sed.txt 
102,zhangya,CTO
103,李导996,COO
104,yy,CFO
105,feixue,CIO
110,lidao,COCO
119,huiling,CFO
[root@m01 /server/files]# sed '$d' sed.txt 
101,oldboy,CEO
102,zhangya,CTO
103,李导996,COO
104,yy,CFO
105,feixue,CIO
110,lidao,COCO
[root@m01 /server/files]# 
[root@m01 /server/files]# 
[root@m01 /server/files]# 
[root@m01 /server/files]# sed -n '$p' sed.txt 
119,huiling,CFO
#案例03 删除 文件中从包含lidao的行到最后一行的内容
[root@m01 /server/files]# cat   sed.txt 
101,oldboy,CEO
102,zhangya,CTO
103,李导996,COO
104,yy,CFO
105,feixue,CIO
110,lidao,COCO
119,huiling,CFO
[root@m01 /server/files]# sed '/lidao/,$d' sed.txt 
101,oldboy,CEO
102,zhangya,CTO
103,李导996,COO
104,yy,CFO
105,feixue,CIO
4 增加
cai 行为单位
四剑客-sed
image.png
#案例01 在文件的最后一行后面增加一行内容 lidao007,007,007,/home/hlj
[root@m01 /server/files]# sed '$a lidao007,007,007,/home/hlj' sed.txt 
101,oldboy,CEO
102,zhangya,CTO
103,李导996,COO
104,yy,CFO
105,feixue,CIO
110,lidao,COCO
119,huiling,CFO
lidao007,007,007,/home/hlj
#案例02 在 第1行上面插入一行内容   lidao007,007,007,/home/hlj
[root@m01 /server/files]# sed '1i lidao007,007,007,/home/hlj' sed.txt 
lidao007,007,007,/home/hlj
101,oldboy,CEO
102,zhangya,CTO
103,李导996,COO
104,yy,CFO
105,feixue,CIO
110,lidao,COCO
119,huiling,CFO
#案例03 替换第1行的内容为 lidao007,007,007,/home/hlj
[root@m01 /server/files]# sed '1c lidao007,007,007,/home/hlj' sed.txt 
lidao007,007,007,/home/hlj
102,zhangya,CTO
103,李导996,COO
104,yy,CFO
105,feixue,CIO
110,lidao,COCO
119,huiling,CFO
#案例04 在/etc/ssh/sshd_config 最后增加内容
[root@m01 /server/files]# sed '$a Port=22nPermitRootLogin=nOnUseDNS=nOnGSSAPIAuthcation=no' 
/etc/ssh/sshd_config 
cat >>sshd_config
5 修改(替换)
s###g s@@@g s///g sAAA
s——替换 substitute sub
#案例01 替换
[root@m01 /server/files]# sed 's#oldboy#oldgirl#g' sed.txt 
101,oldgirl,CEO
102,zhangya,CTO
103,李导996,COO
104,yy,CFO
105,feixue,CIO
110,lidao,COCO
119,huiling,CFO
#案例02 全局替换 非全局替换
# g全局替换  
# 不加上g默认是只替换每一行第1个匹配的内容
[root@m01 /server/files]# sed 's#[0-9]##g' sed.txt 
,oldboy,CEO
,zhangya,CTO
,李导,COO
,yy,CFO
,feixue,CIO
,lidao,COCO
,huiling,CFO
[root@m01 /server/files]# sed 's#[0-9]##' sed.txt 
01,oldboy,CEO
02,zhangya,CTO
03,李导996,COO
04,yy,CFO
05,feixue,CIO
10,lidao,COCO
19,huiling,CFO
#案例03 后向引用
[root@m01 /server/files]# echo   {01..5}{a..e} |sed -r 's#([0-9a-z]+)##g'
                  
      
6 sed进阶
#案例01 把文件中的回车替换为空格(使用sed)  
[root@m01 /server/files]# cat sed.txt 
101,oldboy,CEO
102,zhangya,CTO
103,李导996,COO
104,yy,CFO
105,feixue,CIO
110,lidao,COCO
119,huiling,CFO
## 直接使用出现故障
[root@m01 /server/files]# sed 's#n# #g' sed.txt 
101,oldboy,CEO
102,zhangya,CTO
103,李导996,COO
#通过sed命令 N选项读取多行
seq 10 | sed 'N;s#n# #g'
seq 10 | sed 'N;N;N;N;N;N;N;N;N;s#n# #g'
#sed命令自带 循环格式
[root@m01 /server/files]# seq 5 | sed ':label ;N;s#n# #g; t label ' 
1 2 3 4 5
[root@m01 /server/files]# 
#显示 循环执行流程
[root@m01 /server/files]# seq 5 | sed ':label ;N;s#n# #g;p; t label ' 
1 2
1 2 3
1 2 3 4
1 2 3 4 5
1 2 3 4 5
# N 读写下一行内容,到内存中(模式空间)
# 循环   :标签   ; 循环内容; t 标签

推荐阅读
author-avatar
阿蕓
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有