linux-sed命令
阿新 • • 發佈:2018-08-26
文件結尾 Edito pri 3.3 文件名 repl tro pat 增加
第1章 sed基礎
1.1 sed的選項 stream editor 流編輯器
-r 支持擴展正則
-n 取消默認輸出
-i 直接修改不輸出到桌面
-i.bak 備份
1.2 sed的書寫格式
sed ‘條件命令‘
sed ‘pattern命令‘
sed ‘模式命令‘
1.3 sed命令執行過程
1.讀取文件內容第1行
2.是否滿足條件
1).滿足條件 執行對應的命令 p s d
2).不滿足 繼續第1步
3.截止到文件的最後一行
第2章 sed命令的使用
sed增刪改查 不加i選項只會把修改內容輸出到並沒有真正修改,加上i選項會直接修改文件內容
2.1 sed 增加 cai
c replace 替換
a append 追加
i insert 插入
2.1.1 在person.txt文件第三行下追加12306,xiao,UFO
查看person.txt文件
[root@zeq lx]# cat person.txt 101,zeq,CEO 102,zhang,CTO 103,Love,COO 104,yy,CFO 105,faker,CIO 110,ahao,COCO
第三行下追加12306,xiao,UFO
[root@zeq lx]# sed ‘3a12306,xiao,UFO‘ person.txt a追加,3a在第三行下追加 101,zeq,CEO 102,zhang,CTO 103,Love,COO 12306,xiao,UFO 104,yy,CFO 105,faker,CIO 110,ahao,COCO
2.1.2 在person.txt文件第三行上插入12306,xiao,UFO
[root@zeq lx]# sed ‘3i12306,xiao,UFO‘ person.txt101,zeq,CEO 102,zhang,CTO 12306,xiao,UFO 103,Love,COO 104,yy,CFO 105,faker,CIO 110,ahao,COCO
2.1.3 把person.txt文件第三行替換成12306,xiao,UFO
[root@zeq lx]# sed ‘3c12306,xiao,UFO‘ person.txt 101,zeq,CEO 102,zhang,CTO 12306,xiao,UFO 104,yy,CFO 105,faker,CIO 110,ahao,COCO
2.1.4 在文件最後一行增加
12306,xiao,UFO
12580,tao,XO
[root@zeq lx]# sed ‘$a12306,xiao,UFO\n12580,tao,XO‘ person.txt $最後一行 \n回車 101,zeq,CEO 102,zhang,CTO 103,Love,COO 104,yy,CFO 105,faker,CIO 110,ahao,COCO 12306,xiao,UFO 12580,tao,XO
2.2 sed 刪除 d
2.2.1 刪除第2行到第5行
[root@zeq lx]# sed ‘2,5d‘ person.txt 101,zeq,CEO 110,ahao,COCO
2.2.2 刪除從yy開始的行到文件結尾的內容
[root@zeq lx]# sed ‘/yy/,$d‘ person.txt $文件結尾 101,zeq,CEO 102,zhang,CTO 103,Love,COO
2.2.3 刪除包含ahao的行
[root@zeq lx]# sed ‘/ahao/d‘ person.txt 101,zeq,CEO 102,zhang,CTO 103,Love,COO 104,yy,CFO 105,faker,CIO
2.2.4 刪除不包含ahao的行
[root@zeq lx]# sed ‘/ahao/!d‘ person.txt !取反,排除 110,ahao,COCO
2.3 sed 替換 ‘s###g‘
2.3.1 替換掉所有的數字
[root@zeq lx]# sed ‘s#[0-9]##g‘ person.txt ,zeq,CEO ,zhang,CTO ,Love,COO ,yy,CFO ,faker,CIO ,ahao,COCO
2.3.2 替換掉每行中的第一個數字
[root@zeq lx]# sed ‘s#[0-9]##‘ person.txt sed ‘s#[0-9]##‘ 不加g,默認是匹配到每行第一個數字 sed ‘s#[0-9]##‘ 匹配每行第二個數字 01,zeq,CEO 02,zhang,CTO 03,Love,COO 04,yy,CFO 05,faker,CIO 10,ahao,COCO
2.3.3 後向引用 取出ip地址
[root@zeq ~]# ifconfig eth0 |sed -rn ‘2s#^.*r:(.*) Bc.*#\1#gp‘ 10.0.0.200
[root@zeq ~]# ifconfig eth0 |awk -F‘[ :]+‘ ‘NR==2{print $4}‘ 10.0.0.200
[root@zeq ~]# ifconfig eth0 |awk -F‘addr:| Bc‘ ‘NR==2{print $2}‘ 10.0.0.200
[root@zeq ~]# ifconfig eth0 |awk -F‘[^0-9.]+‘ ‘NR==2{print $2}‘ 10.0.0.200
2.4 sed 查
2.4.1 顯示文件的第5行
[root@zeq ~]# sed -n 5p person.txt 105,faker,CIO
2.4.2 顯示文件的第2行到第5行
[root@zeq ~]# sed -n ‘2,5p‘ person.txt 102,zhang,CTO 103,Love,COO 104,yy,CFO 105,faker,CIO
2.4.3 顯示文件最後一行
[root@zeq ~]# sed -n ‘$p‘ person.txt 110,ahao,COCO
2.4.4 顯示文件中包含zeq的行
[root@zeq ~]# sed -n ‘/zeq/p‘ person.txt 101,zeq,CEO
2.4.5 顯示文件中從包含101的行到105的行
[root@zeq ~]# sed -n ‘/101/,/105/p‘ person.txt 101,zeq,CEO 102,zhang,CTO 103,Love,COO 104,yy,CFO 105,faker,CIO
2.4.6 特殊寫法:顯示文件的第1和4行和5行
[root@zeq ~]# sed -n ‘1p ;4p; 5p‘ person.txt 101,zeq,CEO 104,yy,CFO 105,faker,CIO
2.4.7 顯示有規律的行
[root@zeq ~]# seq 10 |sed -n ‘1~2p‘ 1 3 5 7 9
2.5 sed命令中使用變量
root@zeq ~]# x=zeq 設置x變量為zeq [root@zeq ~]# y=zeq1 設置y變量為zeq1 [root@zeq ~]# sed ‘s#$x#$y#g‘ person.txt 101,zeq1,CEO 102,zhang,CTO 103,Love,COO 104,yy,CFO 105,faker,CIO 110,ahao,COCO 12306,xiao.UFO
2.5.1 把文件person.txt文件中的每一行的內容 替換為對應的行號
for n in {1..7} 這裏使用的shell腳本中的for循環 do sed -i.bak "${n}s#.*#$n#g" person.txt done
2.5.2 批量重命名:刪除文件名中的html_
touch zeq_html_{01..10}.jpg
方法1 命令行格式 [root@zeq data]# ls *.jpg|sed -r "s#(.*)(_.*)#mv & zeq\2#g"|bash
方法2 for循環 for i in {01..10} do mv zeq_${i}.jpg zeq_html_${i}.jpg done
方法3 rename rename html_ "" *.jpg rename 修改誰 改為什麽 修改什麽文件
linux-sed命令