增刪改查
進(jìn)階:模式空間與保持空間 把文件中所有的回車替換為空格
1.sed命令執(zhí)行流程
分析,解決故障,問題的時候
執(zhí)行流程
執(zhí)行流程: 四個字 找誰干啥(條件命令)
image.png
2.sed命令查找
p-print 顯示/打印
image.png
#案例01 顯示第3行 固定行號 某一行
101,oldboy,CEO
102,zhangya,CTO
103,李導(dǎo)996,COO
104,yy,CFO
105,feixue,CIO
110,lidao,COCO
119,huiling,CFO
[root@m01 /server/files]# sed -n '3p' sed.txt
103,李導(dǎo)996,COO
[root@m01 /server/files]#
#案例02 顯示文件的第2到第5行 行號范圍
[root@m01 /server/files]# sed -n '2,5p' sed.txt
102,zhangya,CTO
103,李導(dǎo)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,李導(dǎo)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 實(shí)現(xiàn) grep -A功能 了解
grep -A 5 oldboy oldboy.txt
[root@m01 /server/files]# cat sed.txt
101,oldboy,CEO
102,zhangya,CTO
103,李導(dǎo)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,李導(dǎo)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,李導(dǎo)996,COO
104,yy,CFO
105,feixue,CIO
110,lidao,COCO
#案例07 實(shí)現(xiàn)有規(guī)律的 匹配多行 了解
[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,李導(dǎo)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,李導(dǎo)996,COO
104,yy,CFO
105,feixue,CIO
110,lidao,COCO
119,huiling,CFO
3.刪除
d---delete
image.png
# 案例01
[root@m01 /server/files]# sed '/oldboy/d' sed.txt
102,zhangya,CTO
103,李導(dǎo)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,李導(dǎo)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,李導(dǎo)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的行到最后一行的內(nèi)容
[root@m01 /server/files]# cat sed.txt
101,oldboy,CEO
102,zhangya,CTO
103,李導(dǎo)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,李導(dǎo)996,COO
104,yy,CFO
105,feixue,CIO
4 增加
cai 行為單位
image.png
#案例01 在文件的最后一行后面增加一行內(nèi)容 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,李導(dǎo)996,COO
104,yy,CFO
105,feixue,CIO
110,lidao,COCO
119,huiling,CFO
lidao007,007,007,/home/hlj
#案例02 在 第1行上面插入一行內(nèi)容 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,李導(dǎo)996,COO
104,yy,CFO
105,feixue,CIO
110,lidao,COCO
119,huiling,CFO
#案例03 替換第1行的內(nèi)容為 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,李導(dǎo)996,COO
104,yy,CFO
105,feixue,CIO
110,lidao,COCO
119,huiling,CFO
#案例04 在/etc/ssh/sshd_config 最后增加內(nèi)容
[root@m01 /server/files]# sed '$a Port=22\nPermitRootLogin=no\nUseDNS=no\nGSSAPIAuthcation=no'
/etc/ssh/sshd_config
cat >>sshd_config<<EOF
Port=22
PermitRootLogin=no
UseDNS=no
GSSAPIAuthcation=no
EOF
echo 'Port=22
PermitRootLogin=no
UseDNS=no
GSSAPIAuthcation=no'
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,李導(dǎo)996,COO
104,yy,CFO
105,feixue,CIO
110,lidao,COCO
119,huiling,CFO
#案例02 全局替換 非全局替換
# g全局替換
# 不加上g默認(rèn)是只替換每一行第1個匹配的內(nèi)容
[root@m01 /server/files]# sed 's#[0-9]#<666>#g' sed.txt
<666><666><666>,oldboy,CEO
<666><666><666>,zhangya,CTO
<666><666><666>,李導(dǎo)<666><666><666>,COO
<666><666><666>,yy,CFO
<666><666><666>,feixue,CIO
<666><666><666>,lidao,COCO
<666><666><666>,huiling,CFO
[root@m01 /server/files]# sed 's#[0-9]#<666>#' sed.txt
<666>01,oldboy,CEO
<666>02,zhangya,CTO
<666>03,李導(dǎo)996,COO
<666>04,yy,CFO
<666>05,feixue,CIO
<666>10,lidao,COCO
<666>19,huiling,CFO
#案例03 后向引用
[root@m01 /server/files]# echo {01..5}{a..e} |sed -r 's#([0-9a-z]+)#<\1>#g'
<01a> <01b> <01c> <01d> <01e> <02a> <02b> <02c> <02d> <02e> <03a> <03b> <03c> <03d> <03e> <04a> <04b> <04c>
<04d> <04e> <05a> <05b> <05c> <05d> <05e>
6 sed進(jìn)階
#案例01 把文件中的回車替換為空格(使用sed)
[root@m01 /server/files]# cat sed.txt
101,oldboy,CEO
102,zhangya,CTO
103,李導(dǎo)996,COO
104,yy,CFO
105,feixue,CIO
110,lidao,COCO
119,huiling,CFO
## 直接使用出現(xiàn)故障
[root@m01 /server/files]# sed 's#\n# #g' sed.txt
101,oldboy,CEO
102,zhangya,CTO
103,李導(dǎo)996,COO
#通過sed命令 N選項(xiàng)讀取多行
seq 10 | sed 'N;s#\n# #g'
seq 10 | sed 'N;N;N;N;N;N;N;N;N;s#\n# #g'
#sed命令自帶 循環(huán)格式
[root@m01 /server/files]# seq 5 | sed ':label ;N;s#\n# #g; t label '
1 2 3 4 5
[root@m01 /server/files]#
#顯示 循環(huán)執(zhí)行流程
[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 讀寫下一行內(nèi)容,到內(nèi)存中(模式空間)
# 循環(huán) :標(biāo)簽 ; 循環(huán)內(nèi)容; t 標(biāo)簽