天天看點

sed指令總結

1.1 功能說明

stream editor  流編輯器,實作對檔案的增删改替換查

1.2 文法格式

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

sed –n ‘/過濾内容/’處理的指令 檔案

sed –i ‘s#被替換内容#替換内容#g’ 檔案

參數 簡解
-n 取消預設輸出
-i 改變檔案内容
-r 不用轉義,去掉馬甲
-e 允許多項編輯

1.3 實踐操作

執行個體1-1   

問題:列印出oldboy.txt中的oldboy字元串

指令:sed –n ‘/oldboy/’poldboy.txt

代碼

[root@ben-test ~]# sed -n '/oldboy/'p oldboy.txt

oldboy

說明:p 表示列印 

執行個體1-2   

問題:列印出ett.txt中20—30行的内容

指令:sed –n’20,30’p ett.txt

[root@ben-test ~]# sed -n '20,30'p ett.txt

20

21

22

23

24

25

26

27

28

29

30

說明:此處’20,30’表示20至30行

執行個體1-3   

問題:把oldboy.txt中的oldboy删除,列印出内容

指令:sed –i ‘/oldboy/’doldboy.txt

[root@ben-test ~]# sed -i '/oldboy/'d oldboy.txt 

[root@ben-test ~]# cat oldboy.txt

test

liyao

說明:d 表示删除輸出

     -i 表示改變檔案内容,如果不加-i參數,隻列印删除後的内容,而沒有真正改變檔案中的内容

執行個體1-4   

問題:把oldboy.txt中的test替換成oldboy

指令:sed –i‘s#test#oldboy#g’ oldboy.txt

[root@ben-test ~]# sed -i 's#test#oldboy#g'oldboy.txt

[root@ben-test ~]# cat oldboy.txt                    

說明:s查找并替換,用一個字元串替換另一個字元串

      g(global)與s聯合使用時,表示對目前行全局替換

      #是分隔符号,可以用/@等替換

執行個體1-5   

問題:如何過濾出已知目前目錄下/root中的所有一級目錄(不包含var目錄下面的目錄及隐藏目錄,即隻能是一級目錄)

指令:ls –l /root|sed –n ‘/^d/’p

[root@ben-test ~]# ls -l /root |sed -n '/^d/'p

drwxr-xr-x  2 root root  4096 Sep 15 07:03 aa

drwxr-xr-x  3 root root  4096 Sep 15 03:34data

drwxr-xr-x 12 root root  4096 Sep 15 07:18test

執行個體1-6   

問題:把/root/data目錄中含有oldboy字元的檔案,都把oldboy替換成oldgirl

指令1:sed –i ‘s#oldboy#oldgirl#g’ `grep–lr oldboy /root/data`

[root@ben-test ~]# sed -i 's#oldboy#oldgirl#g'`grep -lr oldboy /root/data`

[root@ben-test ~]# grep -lr oldboy /root/data                             

[root@ben-test ~]# grep -lr oldgirl /root/data

/root/data/a.sh

/root/data/test/aa.txt

指令2:sed –i ‘s#oldboy#oldgirl#g’ `find/root/data –type f –name “*”`

[root@ben-test ~]# sed -i 's#oldboy#oldgirl#g'`find /root/data -type f -name "*"`

執行個體1-7   

問題:删除oldboy列印oldboy.txt中的内容,同時把liyao替換成oldgirl

指令:sed –e ‘/oldboy/’d–e ‘s#liyao#oldgirl#g’ /root/oldboy.txt

[root@ben-test ~]# sed -e '/oldboy/'d -e's#liyao#oldgirl#g' oldboy.txt  (沒有改變檔案内容)

oldgirl

說明:如果需要改變檔案内容,如下

sed-e '/oldboy/'d –i -e 's#liyao#oldgirl#g' –i /root/oldboy.txt

執行個體1-8  追加内容到指定行後

文本内容如下,person.txt

101,oldboy,CEO

102,zhangyao,CTO

103,Alex,COO

104,yy,CFO

105,feixue,CIO

[root@ben-test ~]# sed '2a 106,dandan,CSO'person.txt

106,dandan,CSO     <== 插入内容

說明:參數a是追加文本到指定行後,2a表示把内容追加到第二行的下一行

執行個體1-9  插入文本到指定行前

[root@ben-test ~]# sed '2i 106,dandan,CSO'person.txt 

說明:參數i是插入文本到指定行前,2i表示把内容插入到第二行的上一行

執行個體1-10           多行内容插入

[root@ben-test ~]# sed '2a 106,dandan,CSO\n107,bingbing,CCO'person.txt

106,dandan,CSO

107,bingbing,CCO

[root@ben-test ~]# sed '2a 106,dandan,CSO \   <== \符号是進入換行編輯

> 107,bingbing,CCO' person.txt

106,dandan,CSO

說明:\n是換行符

注意:sed軟體可以對單行或多行進行處理。如果在sed指令前面不指定位址範圍,那麼預設會比對所有行。

用法:n1[,n2]{sed-commands}

位址用逗号分隔的,n1,n2可以用數字、正規表達式、或二者的組合表示。

例子:

    10{sed-commands}        對第10行操作

   10,20{sed-commands}     對10到20行操作,包括第10,20行

   10,+20{sed-commands}   對10到30(10+20)行操作,包括第10,30行

   1~2{sed-commands}       對1,3,5,7,……行操作

   10,${sed-commands}     對10到最後一行($代表最後一行)操作,包括第10行

   /oldboy/{sed-commands}         對比對oldboy的行操作

   /oldboy/,/Alex/{sed-commands}  對比對oldboy的行到比對Alex的行操作

   /oldboy/,${sed-commands}       對比對oldboy的行到最後一行操作

   /oldboy/,10{sed-commands}      對比對oldboy的行到第10行操作,注意:如果前10行沒有比對到oldboy,sed軟體會顯示10行以後的比對oldboy的行,如果有。

   1,/Alex/{sed-commands}         對第1行到比對Alex的行操作

   /oldboy/,+2{sed-commands}      對比對oldboy的行到其後的2行操作

執行個體1-11           正規表達式比對删除

[root@ben-test ~]# sed '/zhangyao/,3d' person.txt

101,oldboy,CEO   (1)

104,yy,CFO      (4)

105,feixue,CIO   (5)

說明:比對到zhangyao字元串,對此行到第3行操作删除

[root@ben-test ~]# sed '/zhangyao/,+3d' person.txt

說明:對比對到zhangyao字元串,還有此行的後3行進行删除

[root@ben-test ~]# sed '/^.*ex.*$/,4d'person.txt 

說明:正規表達式比對到含有ex字元的行,然後進行操作删除

執行個體1-12           用新行替換舊行

[root@ben-test ~]# sed '2c 107,bingbing,CCO'person.txt

上一篇: Git指令總結
下一篇: grep指令總結