sed [ -nefr] [n1,n2] action
-n: 是安静模式,只有经过sed处理的行才会显示,其他不现实
-e:表示直接在命令行上执行。是默认选项不用填写。
-f: 将Sed的操作写在一个文件里面,用的时候-f filename 就可以按照内容进行Sed操作
-r :表示支持正则表达式
n1,n2 代表的是行数
Sed的action (动作)支持如下参数
a: 表示添加,后接字符串,添加到当前行的下一行
c:表示替换,后接的字符串,用它来替换N1到N2之间的行
d:删除行
i:表示插入,后街字符串,添加到当然行的上一行
p:表示打印和-n一起使用
s: 表示搜索,还可以替换1,20s/old/new/g表示把1到20行的old换成new
-
以行为单位的新增/删除功能
1.删除passwd 2-6行
[root@xuegod101 ~]# nl passwd | sed '2,6d'
1 root:x:0:0:root:/root:/bin/bash
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8 halt:x:7:0:halt:/sbin:/sbin/halt
9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10 uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
11 operator:x:11:0:operator:/root:/sbin/nologin
12 games:x:12:100:games:/usr/games:/sbin/nologin
13 gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
14 ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
15 nobody:x:99:99:Nobody:/:/sbin/nologin
16 dbus:x:81:81:System message bus:/:/sbin/nologin
17 vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
18 saslauth:x:499:76:"Saslauthd user":/var/empty/saslauth:/sbin/nologin
2. 删除第 3 到最后一行
[root@xuegod101 ~]# nl passwd | sed '3,$d'
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
3.在第二行后(亦即是加在第三行)加上『drink tea?』字样
[root@xuegod101 ~]# nl /etc/passwd|sed '2a dirnk tea'
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
dirnk tea
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6 sync:x:5:0:sync:/sbin:/bin/sync
4.在第二行前加上『drink tea?』字样
[root@xuegod101 ~]# nl /etc/passwd|sed '1a dirnk tea'
1 root:x:0:0:root:/root:/bin/bash
dirnk tea
2 bin:x:1:1:bin:/bin:/sbin/nologin
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6 sync:x:5:0:sync:/sbin:/bin/sync
[root@xuegod101 ~]# nl /etc/passwd|sed '2i dirnk tea'
1 root:x:0:0:root:/root:/bin/bash
dirnk tea
2 bin:x:1:1:bin:/bin:/sbin/nologin
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6 sync:x:5:0:sync:/sbin:/bin/sync
5.第二行后面加入两行字,例如『Drink tea or .....』与『drink beer?』
[root@xuegod101 ~]# nl /etc/passwd|sed '2a drink tea or ......\
> dirnk beer?'
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
drink tea or ......
dirnk beer?
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6 sync:x:5:0:sync:/sbin:/bin/sync
-
以行为单位的取代与显示功能
1.我想将第2-5行的内容取代成为『No 2-5 number』呢?
[root@xuegod101 ~]# nl /etc/passwd|sed '2,5c NO 2-5 number'
1 root:x:0:0:root:/root:/bin/bash
NO 2-5 number
6 sync:x:5:0:sync:/sbin:/bin/sync
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8 halt:x:7:0:halt:/sbin:/sbin/halt
9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10 uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
11 operator:x:11:0:operator:/root:/sbin/nologin
2.仅列出 /etc/passwd 文件内的第 5-7 行
[root@xuegod101 ~]# nl /etc/passwd|sed -n '5,7p'
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6 sync:x:5:0:sync:/sbin:/bin/sync
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
部分数据的搜寻取代的功能
1.打印ip地址
[root@xuegod101 ~]# ifconfig eth0 | grep 'inet addr' | sed 's/^.*addr://g'|sed 's/Bcast.*//g'
192.168.9.109
注解: sed 's/^.*addr://g' 删除任何开头addr:的部分 后面直接替换成空
sed 's/Bcast.*//g' 删除Bcast结尾的部分
直接修改文件的内容(危险动作)
1.利用sed 把passwd 文件内每一行结尾若为nologin 则换成!
[root@xuegod101 ~]# sed -i 's/nologin$/\!/g' passwd
[root@xuegod101 ~]# nl passwd
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/!
3 daemon:x:2:2:daemon:/sbin:/sbin/!
4 adm:x:3:4:adm:/var/adm:/sbin/!
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/!
6 sync:x:5:0:sync:/sbin:/bin/sync
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8 halt:x:7:0:halt:/sbin:/sbin/halt
9 mail:x:8:12:mail:/var/spool/mail:/sbin/!
10 uucp:x:10:14:uucp:/var/spool/uucp:/sbin/!
常用实例
1.删除passwd行首的空格
[root@xuegod101 ~]# nl passwd
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/!
3 daemon:x:2:2:daemon:/sbin:/sbin/!
4 adm:x:3:4:adm:/var/adm:/sbin/!
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/!
[root@xuegod101 ~]# sed 's/^ * //g' passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/!
daemon:x:2:2:daemon:/sbin:/sbin/!
adm:x:3:4:adm:/var/adm:/sbin/!
lp:x:4:7:lp:/var/spool/lpd:/sbin/!
[root@xuegod101 ~]# sed 's/^[ ]* //g' passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/!
daemon:x:2:2:daemon:/sbin:/sbin/!
adm:x:3:4:adm:/var/adm:/sbin/!
lp:x:4:7:lp:/var/spool/lpd:/sbin/!
[root@xuegod101 ~]# sed 's/^[[:space:]]* //g' passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/!
daemon:x:2:2:daemon:/sbin:/sbin/!
adm:x:3:4:adm:/var/adm:/sbin/!
lp:x:4:7:lp:/var/spool/lpd:/sbin/!