sed 常見用法

                                   常見用法,增刪改查

本文爲轉載,原文地址張耀的博客

  • 增加,插入

     i 插入到指定行

    a 追加到指定行後

 

  • 單行插入

[root@localhost ~]# cat persion.txt 
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
[root@localhost ~]# sed  '2i ceshi' persion.txt  #插入到第二行
101,oldboy,CEO
ceshi
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
[root@localhost ~]# sed '2a ceshi' persion.txt  #追加到第二行之後
101,oldboy,CEO
102,zhangyao,CTO
ceshi
103,Alex,COO
104,yy,CFO
105,feixue,CIO

 

  • 多行插入

[root@localhost ~]# sed '2i ceshi\nceshi2' persion.txt   用\n換行符插入多行
101,oldboy,CEO               
ceshi
ceshi2
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
[root@localhost ~]# sed '2a ceshi\nceshi2' persion.txt  
101,oldboy,CEO
102,zhangyao,CTO
ceshi
ceshi2
103,Alex,COO
104,yy,CFO
105,feixue,CIO
[root@localhost ~]# sed '12a Port 52113\nPermitRootLogin no\nPermitEmptyPasswords no\nUseDNS no\nGSSAPIAuthentication no' sshd_config |grep -nvE "^$"
1:#     $OpenBSD: sshd_config,v 1.80 2008/07/02 02:24:18 djm Exp $
3:# This is the sshd server system-wide configuration file.  See
4:# sshd_config(5) for more information.
6:# This sshd was compiled with PATH=/usr/local/bin:/bin:/usr/bin
8:# The strategy used for options in the default sshd_config shipped with
9:# OpenSSH is to specify options with their default value where
10:# possible, but leave them commented.  Uncommented options change a
11:# default value.
13:Port 52113
14:PermitRootLogin no
15:PermitEmptyPasswords no
16:UseDNS no
17:GSSAPIAuthentication no
18:#Port 22                     用一條命令添加第13-17行,注意此時沒有-i參數,文件是沒有修改的
  • 指定執行的地址範圍

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,……行操作
                             從第一行開始,等差數列爲2的行
   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行,共計3行進行操作

 

  • 刪除

 d 刪除指定行

[root@oldboy ~]# sed 'd' person.txt
[root@oldboy ~]#
[root@oldboy ~]# sed '2d' person.txt
101,oldboy,CEO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
[root@oldboy ~]# sed '2,5d' person.txt
101,oldboy,CEO
[root@oldboy ~]# sed '3,$d' person.txt
101,oldboy,CEO
102,zhangyao,CTO
[root@oldboy ~]# sed '1~2d' person.txt
102,zhangyao,CTO
104,yy,CFO
[root@oldboy ~]# sed  '1,+2d' person.txt
104,yy,CFO
105,feixue,CIO
[root@oldboy ~]# sed '/zhangyao/d' person.txt
101,oldboy,CEO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
[root@oldboy ~]# sed '/oldboy/,/Alex/d' person.txt
104,yy,CFO
105,feixue,CIO
[root@oldboy ~]# sed '/oldboy/,3d' person.txt
104,yy,CFO
105,feixue,CIO

  c 用新行取代舊行

[root@oldboy ~]# sed '2c 106,dandan,CSO' person.txt
101,oldboy,CEO
106,dandan,CSO
103,Alex,COO
104,yy,CFO
105,feixue,CIO

s 文本替換  g全局替換

-i  修改文件內容

[root@localhost ~]# sed '2s/10/lumang/g' persion.txt  
101,oldboy,CEO
lumang2,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
106
[root@localhost ~]# sed 's/10/lumang/g' persion.txt  
lumang1,oldboy,CEO
lumang2,zhangyao,CTO
lumang3,Alex,COO
lumang4,yy,CFO
lumang5,feixue,CIO
lumang6


sed 's/N1/N2/g'
N1,N2均可以使用變量
N1可以使用正則,N2不能用正則
  • 分組替換\( \)\1的使用說明

sed軟件的\( \)的功能可以記住正則表達式的一部分,其中,\1爲第一個記住的模式即第一個小括號中的匹配內容,\2第二記住的模式,即第二個小括號中的匹配內容,sed最多可以記住9個。

[root@localhost ~]# ifconfig eth0|sed -nr 's/^.*dr:(.*)  B.*$/\1/gp' 
192.168.111.132
-n 取消默認輸出
-r 支持擴展正則,不加-r ,()要轉義
's///gp'中的p是打印的意思

-n取消默認輸出後,不加p不會輸出內容
  •  特殊符號&代表被替換的內容

[root@localhost ~]# sed 's/oldboy/---&---/g' persion.txt 
101,---oldboy---,CEO
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO

 


sed重命名文件


[root@localhost logs]# ls
stu_102999_1_finished.jpg  stu_102999_3_finished.jpg  stu_102999_5_finished.jpg
stu_102999_2_finished.jpg  stu_102999_4_finished.jpg

[root@localhost logs]# ls|sed -r 's/(.*)_finished.jpg/mv & \1.jpg/g' |bash
[root@localhost logs]# ls
stu_102999_1.jpg  stu_102999_2.jpg  stu_102999_3.jpg  stu_102999_4.jpg  stu_102999_5.jpg

 

p 輸出指定內容,但默認會輸出2次匹配的結果,因此使用n取消默認輸出

 

[root@localhost ~]# sed '2p' persion.txt 
101,oldboy,CEO            
102,zhangyao,CTO           
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
106
輸出結果不是想要的第二行,而且第二行重複輸出
[root@localhost ~]# sed '2p' persion.txt  -n
102,zhangyao,CTO
通常p和-n取消默認輸出是一同出現
[root@localhost ~]# sed '2,3p' persion.txt  -n
102,zhangyao,CTO
103,Alex,COO
[root@localhost ~]# sed '2,/yy/p' persion.txt  -n 
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
[root@localhost ~]# sed '/02/,/yy/p' persion.txt  -n 
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
[root@localhost ~]# 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章