sed 應用案例

  • sed是什麼?
    sed命令是一個面向行處理的工具,它以"行"爲處理單位,處理後的結果會輸出到標準輸出
  • sed的工做原理
    sed會把要處理的行存儲在緩衝區中,接着sed命令處理緩衝區的內容,處理完成後把緩衝區內容送往屏幕,這個緩衝區稱爲"模式空間".
  • d 表示刪除行
[root@linux01 ~]# cat file1.txt 
test 1
one two three proce
test 2 
test test file
[root@linux01 ~]# sed '/2/d' file1.txt 
test 1
one two three proce
test test file

/2/d表示把文件中包含2的行刪除linux

  • 提取文件中每行的第一個域內容
[root@linux01 ~]# head -n5 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@linux01 ~]# head -n5 /etc/passwd|sed 's/:.*$//'
root
bin
daemon
adm
lp

s 表示替換的做用,用法 s/SOURCE/DEST/ ,匹配SOURCE內容替換成DEST內容,":.*$"表示匹配行中第一個:(冒號)開始到行末內容清空處理bash

  • 輸出匹配內容的行
[root@linux01 ~]# head -n5 /etc/passwd|sed '/root/p'
root:x:0:0:root:/root:/bin/bash
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@linux01 ~]# head -n5 /etc/passwd|sed -n '/root/p'
root:x:0:0:root:/root:/bin/bash

n 能夠讓sed輸出匹配內容的行,否則它會先輸出處理的行,再執行後面的動做工具

  • 輸出必定範圍的內容
[root@linux01 ~]# sed -n '1,5p' /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

輸出1到5行的內容code

  • 替換的另外一個用法 "/^[dr]/s/b/B/g"中"^[dr]"表示匹配以d或r開頭的行,s/xx/xx/g表示將全部xx替換成xx
[root@linux01 ~]# head -n5 /etc/passwd| sed '/^[dr]/s/b/B/g'
root:x:0:0:root:/root:/Bin/Bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sBin:/sBin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
  • 刪除每行中最後兩個字符,"..$"中"."表示匹配任意一個字符,"$"表示行末結束符
[root@linux01 ~]# head -n5 /etc/passwd| sed 's/..$//'
root:x:0:0:root:/root:/bin/ba
bin:x:1:1:bin:/bin:/sbin/nolog
daemon:x:2:2:daemon:/sbin:/sbin/nolog
adm:x:3:4:adm:/var/adm:/sbin/nolog
lp:x:4:7:lp:/var/spool/lpd:/sbin/nolog
  • 刪除每行前兩個字符
[root@linux01 ~]# head -n5 /etc/passwd| sed 's/..//'
ot:x:0:0:root:/root:/bin/bash
n:x:1:1:bin:/bin:/sbin/nologin
emon:x:2:2:daemon:/sbin:/sbin/nologin
m:x:3:4:adm:/var/adm:/sbin/nologin
:x:4:7:lp:/var/spool/lpd:/sbin/nologin
  • & 在sed中指代前面被匹配的部分
[root@linux01 ~]# head -n5 /etc/passwd| sed 's/nologin/&2014/'
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin2014
daemon:x:2:2:daemon:/sbin:/sbin/nologin2014
adm:x:3:4:adm:/var/adm:/sbin/nologin2014
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin2014
  • () 在sed的用法 咱們稱爲"sed的預存儲技術",()的內容被依次暫存起來,存儲在\N裏面,方便調用處理
[root@linux01 ~]# head -n1 /etc/passwd| sed 's/\(root\)\(.*\)\(bash\)/\3\2\1/'
bash:x:0:0:root:/root:/bin/root
  • 定位內容的另外一方法
[root@linux01 ~]# head -n5 /etc/passwd| sed -n '/0/,/3/p'
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
  • -e 選項可設置多個command,使用-e選項後面只能跟command內容不能再夾雜其餘選項
[root@linux01 ~]# head -n5 /etc/passwd| sed -ne '1,2p' -e '5p'
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
  • 從文件中讀取command內容,咱們能夠把經常使用的規則寫進文件,方便平時工做使用
[root@linux01 ~]# cat test.txt 
/0/,/3/p
[root@linux01 ~]#  head -n5 /etc/passwd| sed -nf test.txt
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
  • 在匹配行下插入文件內容
[root@linux01 ~]#  head -n5 /etc/passwd| sed '/2/r test.txt'
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
/0/,/3/p
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
  • 在匹配行下插入自定義內容 a\後跟自定義內容便可
[root@linux01 ~]#  head -n5 /etc/passwd| sed '/2/a\===command==='
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
===command===
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
  • 在匹配行上插入自定義內容 i\後跟自定義內容便可
[root@linux01 ~]#  head -n5 /etc/passwd| sed '/2/i\===before==='
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
===before===
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
  • y 表示按字符依次替換,若是第一次處理字符碰到本身替換本身時,後面的字符替換動做便失效
[root@linux01 ~]#  head -n5 /etc/passwd| sed 'y/oo/Bo/'
rBBt:x:0:0:rBBt:/rBBt:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nBlBgin
daemBn:x:2:2:daemBn:/sbin:/sbin/nBlBgin
adm:x:3:4:adm:/var/adm:/sbin/nBlBgin
lp:x:4:7:lp:/var/spBBl/lpd:/sbin/nBlBgin
[root@linux01 ~]#  head -n5 /etc/passwd| sed 'y/oo/oB/'
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
  • 隔行操做
[root@linux01 ~]#  head -n5 /etc/passwd| sed 'n;s/bin/MOM/g'
root:x:0:0:root:/root:/bin/bash
MOM:x:1:1:MOM:/MOM:/sMOM/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sMOM/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
  • 將指定行寫入特定文件中
[root@linux01 ~]#  head -n5 /etc/passwd| sed '/root/w new.txt'
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@linux01 ~]# cat new.txt
root:x:0:0:root:/root:/bin/bash
  • 概括一下
  • 經常使用動做 r a i p w d s y n
  • 經常使用選項 -f -e -n
相關文章
相關標籤/搜索