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字符串