sed知識及經常使用用法梳理

1.sed命令簡介及其參數說明

  sed流編輯器,擅長對文本進行增刪改查,過濾指定的字符串和取指定行,也能夠在行中字符串先後插入內容,功能很是強大.linux

  sed命令的語法及經常使用選項:ios

sed [OPTION]... {script-only-if-no-other-script} [input-file]
      選項	      sed內置命令符	            文本文件
選項 選項說明
-n

取消默認輸出,只打印被sed處理的行正則表達式

(sed相似cat,不加-n會輸出全部內容)緩存

-e 使用-e能夠屢次編輯,但要注意順序會影響編輯的結果
-r 使用此參數後,配合使用正則表達式無需\轉義
-i 直接修改(替換)文本內容,不在屏幕輸出顯示

  sed的內置命令符經常使用於實現對文本的操做功能,如增刪改查等:  app

內置命令符 說明
a append,在指定行後添加一行或多行文本
d delete,刪除指定行
p print,打印匹配到的行,有時候會和-n參數配合使用
s 用一個字符串替換另外一個字符串
g global,在行內進行全局替換
i insert,在指定行前添加一行或者多行文本

2. sed經常使用用法示例 

  如下文本爲測試文件. 編輯器

[root@test ~]# cat a.txt
101 zhangsan guangdong 333 555
102 lisi guangxi 444 555 666
103 wangyi hunan 111 222 333
104 libai hubei 999 1000 777
105 dupu beijing 11122 3333222 5555

2.1 打印行p  

[root@test ~]# sed -n '/libai/p' a.txt  #<==打印字符串所在行
104 libai hubei 999 1000 777
[root@test ~]# sed -n '1,2p' a.txt      #<==按照行號打印行,打印連續行
101 zhangsan guangdong 333 555
102 lisi guangxi 444 555 666
[root@test ~]# ifconfig eth0|sed -nr 's/^.*net (.*)  net.*$/\1/gp'   #<==c7.x中,gp配合使用,經常使用用法
10.0.0.30

2.2 刪除行d 

[root@test ~]# sed '/zhangsan/d' a.txt   #<==刪除包含指定字符串的全部行(緩存中刪除)
102 lisi guangxi 444 555 666
103 wangyi hunan 111 222 333
104 libai hubei 999 1000 777
105 dupu beijing 11122 3333222 5555
[root@test ~]# sed '3d' a.txt       #<==刪除指定行(緩存中刪除)
101 zhangsan guangdong 333 555
102 lisi guangxi 444 555 666
104 libai hubei 999 1000 777
105 dupu beijing 11122 3333222 5555
[root@test ~]# sed '2,5d' a.txt     #<==刪除2,3,4,5行,連續多行刪除
101 zhangsan guangdong 333 555
[root@test ~]# sed -i '4d' a.txt    #<==真正刪除內容
[root@test ~]# sed '3,$d' a.txt     #<===刪除第3行至末尾,剩下的都被打印顯示
101 zhangsan guangdong 333 555
102 lisi guangxi 444 555 666
[root@test ~]# sed '/^$/d' a.txt   #<==刪除空行  

 

2.3 替換字符串s,配合g可進行全局替換

[root@test ~]# sed 's/libai/libaibai/g' a.txt  #<==全局替換單個字符串單詞
101 zhangsan guangdong 333 555
102 lisi guangxi 444 555 666
103 wangyi hunan 111 222 333
104 libaibai hubei 999 1000 777
105 dupu beijing 11122 3333222 5555
[root@test ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config  #<==系統優化選項 
[root@test ~]# cat b.txt            #<==若是沒有g全局替換,默認是將每一行的第一個匹配的字符串替換
1111 BBBBB CCCCC 1111
AAAA 2222 3333 1111 DDDD 1111
[root@test ~]# sed 's/1111/EEEE/' b.txt 
EEEE BBBBB CCCCC 1111
AAAA 2222 3333 EEEE DDDD 1111
[root@test ~]# sed -n 's/^101/DDD/p' a.txt     #<==只有匹配了101並替換纔會打印此行
DDD zhangsan guangdong 333 555
[root@test ~]# ifconfig eth0|sed -nr 's/^.*net (.*)  net.*$/\1/gp'    #<==替換並打印IP地址
10.0.0.30 

2.4 增長/插入內容a/i 

  注意: a 增長內容是在行後; i 插入內容是在行前測試

[root@test ~]# sed '3a 103.3 liubei sichuang 456 123 789' a.txt      #<==在指定行後增長內容
101 zhangsan guangdong 333 555
102 lisi guangxi 444 555 666
103 wangyi hunan 111 222 333
103.3 liubei sichuang 456 123 789
104 libai hubei 999 1000 777
105 dupu beijing 11122 3333222 5555

[root@test ~]# sed -i '3a 103.3 liubei sichuang 456 123 789' a.txt   #<==真正增長內容

[root@test ~]# sed '2i 101.1 liubei sichuang 444 556 111' a.txt 
101 zhangsan guangdong 333 555
101.1 liubei sichuang 444 556 111
102 lisi guangxi 444 555 666
103 wangyi hunan 111 222 333
104 libai hubei 999 1000 777
105 dupu beijing 11122 3333222 5555

[root@test ~]# sed -i '2i 101.1 liubei sichuang 444 556 111' a.txt   #<==真正插入內容

[root@test ~]# sed 's/lisi/nihao &/' a.txt  #<==在指定字符串(文本中惟一)前插入內容,注意看狀況是否添加空格
101 zhangsan guangdong 333 555
102 nihao lisi guangxi 444 555 666
103 wangyi hunan 111 222 333
104 libai hubei 999 1000 777
105 dupu beijing 11122 3333222 5555

[root@test ~]# sed 's/lisi/& nihao/' a.txt  #<==在指定字符串(文本中惟一)後插入內容,注意看狀況是否添加空格
101 zhangsan guangdong 333 555
102 lisi nihao guangxi 444 555 666
103 wangyi hunan 111 222 333
104 libai hubei 999 1000 777
105 dupu beijing 11122 3333222 5555
[root@test ~]# sed 's/rhgb/& crashkernel=auto biosdevname=0 net.ifnames=0/' /etc/sysconfig/grub.bak   #<==c7.x系統優化內核實例 
[root@test ~]# sed '3 s/wangyi/& test/' a.txt  #<==指定行號,在某個字符串後插入內容 
[root@test ~]# sed 's/^/HEAD&/' a.txt        #<==在每行行頭添加內容
HEAD101 zhangsan guangdong 333 555
HEAD102 lisi guangxi 444 555 666
HEAD103 wangyi hunan 111 222 333
HEAD104 libai hubei 999 1000 777
HEAD105 dupu beijing 11122 3333222 5555
[root@test ~]# sed 's/$/&HEAD/' a.txt       #<==在每行行尾添加內容
101 zhangsan guangdong 333 555HEAD
102 lisi guangxi 444 555 666HEAD
103 wangyi hunan 111 222 333HEAD
104 libai hubei 999 1000 777HEAD
105 dupu beijing 11122 3333222 5555HEAD
相關文章
相關標籤/搜索