sed 以行為機關進行資料替換删除添加選取指定内容
參數:
使用管道:
d 删除
a 添加一行内容于指定行的下一行
i 插入一行内容于指定行的上一行
c 用一行自定義内容替換掉某行或連續多行内容
p 列印指定行
s 支援正規表達式的字元替換
例:
[root@localhost /data/backup]#cat /etc/passwd | head -6 > studysed
[[email protected] /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
先找個檔案
删除:
[[email protected] /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
[[email protected] /data/backup]#nl studysed | sed '2,5d'
1root:x:0:0:root:/root:/bin/bash
6sync:x:5:0:sync:/sbin:/bin/sync
[[email protected] /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
[[email protected] /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
[[email protected] /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 隔開
替換:
[r[email protected] /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
列印到螢幕:
[[email protected] /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 才好用
[[email protected] /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等其他工具用法相同):
[roo[email protected] /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
[[email protected] /data/backup]#nl studysed | grep root
1root:x:0:0:root:/root:/bin/bash
[[email protected] /data/backup]#nl studysed | grep root | sed 's/^.*://g'
/bin/bash
删除其他内容,得到root登入的bash,其中引号内的^表示行首,點.表示任意字元,星号*表示前一字元的零個或任意多個,^.*:表示從行首到冒号:前的所有内容,結合替換文法's/^.*://g'意即将行首到冒号的所有内容替換為空。
不考慮實際意義我們隻保留username一下:
[[email protected] /data/backup]#nl studysed | grep root | sed 's/:.*$//g'
1root
删除(替換為空)了冒号到最後的内容,符号$表示行尾
直接操作檔案
-e直接在指令行操作(預設)
-i直接修改檔案内容,不顯示在螢幕
-n 僅顯示被操作的行
-r 擴充正規表達式(預設基礎正規表達式)
這裡僅試下-i
[[email protected] /data/backup]#sed 's/:.*$//g' -i studysed
[[email protected] /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字元串
可能待續
轉載于:https://blog.51cto.com/lybliangliang/1952028