sed 基礎用法

sed 以行爲單位進行數據替換刪除添加選取指定內容



參數:


使用管道:

d 刪除

a 添加一行內容於指定行的下一行

i 插入一行內容於指定行的上一行

c 用一行自定義內容替換掉某行或連續多行內容

p 打印指定行

s 支持正則表達式的字符替換


例:

[root@localhost /data/backup]#cat /etc/passwd | head -6 > studysed

[root@localhost /data/backup]#cat studysed 

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

sync:x:5:0:sync:/sbin:/bin/sync

先找個文件

刪除:

[root@localhost /data/backup]#nl studysed | sed '2d'

     1root:x:0:0:root:/root:/bin/bash

     3daemon:x:2:2:daemon:/sbin:/sbin/nologin

     4adm:x:3:4:adm:/var/adm:/sbin/nologin

     5lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

     6sync:x:5:0:sync:/sbin:/bin/sync

[root@localhost /data/backup]#nl studysed | sed '2,5d'

     1root:x:0:0:root:/root:/bin/bash

     6sync:x:5:0:sync:/sbin:/bin/sync

[root@localhost /data/backup]#nl studysed | sed '2a 00000000'

     1root:x:0:0:root:/root:/bin/bash

     2bin:x:1:1:bin:/bin:/sbin/nologin

00000000

     3daemon:x:2:2:daemon:/sbin:/sbin/nologin

     4adm:x:3:4:adm:/var/adm:/sbin/nologin

     5lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

     6sync:x:5:0:sync:/sbin:/bin/sync

[root@localhost /data/backup]#nl studysed | sed '2i 00000000'

     1root:x:0:0:root:/root:/bin/bash

00000000

     2bin:x:1:1:bin:/bin:/sbin/nologin

     3daemon:x:2:2:daemon:/sbin:/sbin/nologin

     4adm:x:3:4:adm:/var/adm:/sbin/nologin

     5lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

     6sync:x:5:0:sync:/sbin:/bin/sync

[root@localhost /data/backup]#nl studysed | sed '2i 00000000\n1111111'

     1root:x:0:0:root:/root:/bin/bash

00000000

1111111

     2bin:x:1:1:bin:/bin:/sbin/nologin

     3daemon:x:2:2:daemon:/sbin:/sbin/nologin

     4adm:x:3:4:adm:/var/adm:/sbin/nologin

     5lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

     6sync:x:5:0:sync:/sbin:/bin/sync

插入兩行內容可用換行符 \n 隔開

替換:

[root@localhost /data/backup]#nl studysed | sed '3,5c enjoy study'

     1root:x:0:0:root:/root:/bin/bash

     2bin:x:1:1:bin:/bin:/sbin/nologin

enjoy study

     6sync:x:5:0:sync:/sbin:/bin/sync

打印到屏幕:

[root@localhost /data/backup]#nl studysed | sed '3,5p'

     1root:x:0:0:root:/root:/bin/bash

     2bin:x:1:1:bin:/bin:/sbin/nologin

     3daemon:x:2:2:daemon:/sbin:/sbin/nologin

     3daemon:x:2:2:daemon:/sbin:/sbin/nologin

     4adm:x:3:4:adm:/var/adm:/sbin/nologin

     4adm:x:3:4:adm:/var/adm:/sbin/nologin

     5lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

     5lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

     6sync:x:5:0:sync:/sbin:/bin/sync

結合 -n 纔好用

[root@localhost /data/backup]#nl studysed | sed -n '3,5p'

     3daemon:x:2:2:daemon:/sbin:/sbin/nologin

     4adm:x:3:4:adm:/var/adm:/sbin/nologin

     5lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

字符替換(與vim等其他工具用法相同):

[root@localhost /data/backup]#nl studysed | sed 's/nologin/system/g'

     1root:x:0:0:root:/root:/bin/bash

     2bin:x:1:1:bin:/bin:/sbin/system

     3daemon:x:2:2:daemon:/sbin:/sbin/system

     4adm:x:3:4:adm:/var/adm:/sbin/system

     5lp:x:4:7:lp:/var/spool/lpd:/sbin/system

     6sync:x:5:0:sync:/sbin:/bin/sync

[root@localhost /data/backup]#nl studysed | grep root 

     1root:x:0:0:root:/root:/bin/bash

[root@localhost /data/backup]#nl studysed | grep root | sed 's/^.*://g'

/bin/bash

刪除其他內容,得到root登錄的bash,其中引號內的^表示行首,點.表示任意字符,星號*表示前一字符的零個或任意多個,^.*:表示從行首到冒號:前的所有內容,結合替換語法's/^.*://g'意即將行首到冒號的所有內容替換爲空。


不考慮實際意義我們只保留username一下:

[root@localhost /data/backup]#nl studysed | grep root | sed 's/:.*$//g'

     1root

刪除(替換爲空)了冒號到最後的內容,符號$表示行尾




直接操作文件

-e直接在命令行操作(默認)

-i直接修改文件內容,不顯示在屏幕

-n 僅顯示被操作的行

-r 擴展正則表達式(默認基礎正則表達式)



這裏僅試下-i

[root@localhost /data/backup]#sed  's/:.*$//g' -i studysed 

[root@localhost /data/backup]#cat studysed 

root

bin

daemon

adm

lp

sync

這樣直接修改文件內容



關於擴展正則表達式(沒有多加實驗,僅做記錄備忘):

+   指一個或一個以上前一字符,比如's+'指s,ss,sss,ssss等

?  指零個或一個前一字符,'s?'指代空或s

|   指 字符串一或字符串二,'good|glad '指good或glad,可以多個同時使用

() 字符組合符號,'g(oo|la)d'同上指good或glad,組合+使用'g(oo)+'指選取oo或oooo等一個或多個oo字符串



可能待續i_f01.gif


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