1.简介
下面的命令,来查阅sed的帮助文档
$ info sed
$ man sed
sed是Stream Editor的缩写,可以用来处理文件,或者管道符传递过来的数据流。
2.语法
sed SCRIPT INPUTFILE...
下面的命令是一样的。
root@ubuntu:~# cat input.txt
hello world!!
root@ubuntu:~# sed 's/hello/world/' input.txt
world world!!
root@ubuntu:~# sed 's/hello/world/' < input.txt
world world!!
root@ubuntu:~# cat input.txt | sed 's/hello/world/' -
world world!!
下面的这些命令也是一样的
sed 's/hello/world/' input.txt > output.txt
sed -e 's/hello/world/' input.txt > output.txt
sed --expression='s/hello/world/' input.txt > output.txt
echo 's/hello/world/' > myscript.sed
sed -f myscript.sed input.txt > output.txt
sed --file=myscript.sed input.txt > output.txt
3.用法
下面的常用命令都用下面这个文件
[root@centos ~]# cat -n mypassword
1 root:x:0:0:root:/root:/bin/bash
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
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 operator:x:11:0:operator:/root:/sbin/nologin
11 games:x:12:100:games:/usr/games:/sbin/nologin
12 ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
13 nobody:x:99:99:Nobody:/:/sbin/nologin
14 systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
15 dbus:x:81:81:System message bus:/:/sbin/nologin
16 polkitd:x:999:998:User for polkitd:/:/sbin/nologin
17 sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
18 postfix:x:89:89::/var/spool/postfix:/sbin/nologin
19 chrony:x:998:996::/var/lib/chrony:/sbin/nologin
20 lihg:x:1000:1000:lihg:/home/lihg:/bin/bash
21 nginx:x:997:995:nginx user:/var/cache/nginx:/sbin/nologin
22 tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
3.1.打印行(查找)
为了显示行数,用 cat 加管道符
打印固定行
用到命令p
和属性-n
[root@centos ~]# cat -n mypassword | sed -n '10p' -
10 operator:x:11:0:operator:/root:/sbin/nologin
打印前10行
cat -n mypassword | head -n 10
跟这个命令一样
[root@centos ~]# cat -n mypassword | sed -n '1, 10p' -
1 root:x:0:0:root:/root:/bin/bash
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
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 operator:x:11:0:operator:/root:/sbin/nologin
打印15行以后的所有行
[root@centos ~]# cat -n mypassword | sed -n '15,$p' -
15 dbus:x:81:81:System message bus:/:/sbin/nologin
16 polkitd:x:999:998:User for polkitd:/:/sbin/nologin
17 sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
18 postfix:x:89:89::/var/spool/postfix:/sbin/nologin
19 chrony:x:998:996::/var/lib/chrony:/sbin/nologin
20 lihg:x:1000:1000:lihg:/home/lihg:/bin/bash
21 nginx:x:997:995:nginx user:/var/cache/nginx:/sbin/nologin
22 tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
打印后10行
这里用sed就不太好用了
[root@centos ~]# cat -n mypassword | tail -n 10
13 nobody:x:99:99:Nobody:/:/sbin/nologin
14 systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
15 dbus:x:81:81:System message bus:/:/sbin/nologin
16 polkitd:x:999:998:User for polkitd:/:/sbin/nologin
17 sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
18 postfix:x:89:89::/var/spool/postfix:/sbin/nologin
19 chrony:x:998:996::/var/lib/chrony:/sbin/nologin
20 lihg:x:1000:1000:lihg:/home/lihg:/bin/bash
21 nginx:x:997:995:nginx user:/var/cache/nginx:/sbin/nologin
22 tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
打印带有/bin/bash的行(这里正则要用\转译)
[root@centos ~]# cat -n mypassword | sed -n '/\/bin\/bash/p' -
1 root:x:0:0:root:/root:/bin/bash
20 lihg:x:1000:1000:lihg:/home/lihg:/bin/bash
打印nobody到postfix之间的行
[root@centos ~]# cat -n mypassword | sed -n '/nobody/,/postfix/p' -
13 nobody:x:99:99:Nobody:/:/sbin/nologin
14 systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
15 dbus:x:81:81:System message bus:/:/sbin/nologin
16 polkitd:x:999:998:User for polkitd:/:/sbin/nologin
17 sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
18 postfix:x:89:89::/var/spool/postfix:/sbin/nologin
3.2 追加行
主要用到命令
i
和a
在第二行后面追加行 命令a
[root@centos ~]# cat -n mypassword | sed '2axxxxxxxxxxxxxxxxxxxxxxxxxx' -
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
xxxxxxxxxxxxxxxxxxxxxxxxxx
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
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 operator:x:11:0:operator:/root:/sbin/nologin
11 games:x:12:100:games:/usr/games:/sbin/nologin
12 ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
13 nobody:x:99:99:Nobody:/:/sbin/nologin
14 systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
15 dbus:x:81:81:System message bus:/:/sbin/nologin
16 polkitd:x:999:998:User for polkitd:/:/sbin/nologin
17 sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
18 postfix:x:89:89::/var/spool/postfix:/sbin/nologin
19 chrony:x:998:996::/var/lib/chrony:/sbin/nologin
20 lihg:x:1000:1000:lihg:/home/lihg:/bin/bash
21 nginx:x:997:995:nginx user:/var/cache/nginx:/sbin/nologin
22 tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
在第二行前面追加行 命令i
[root@centos ~]# cat -n mypassword | sed '2ixxxxxxxxxxxxxxxxxxxxxxxxxx' -
1 root:x:0:0:root:/root:/bin/bash
xxxxxxxxxxxxxxxxxxxxxxxxxx
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
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 operator:x:11:0:operator:/root:/sbin/nologin
11 games:x:12:100:games:/usr/games:/sbin/nologin
12 ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
13 nobody:x:99:99:Nobody:/:/sbin/nologin
14 systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
15 dbus:x:81:81:System message bus:/:/sbin/nologin
16 polkitd:x:999:998:User for polkitd:/:/sbin/nologin
17 sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
18 postfix:x:89:89::/var/spool/postfix:/sbin/nologin
19 chrony:x:998:996::/var/lib/chrony:/sbin/nologin
20 lihg:x:1000:1000:lihg:/home/lihg:/bin/bash
21 nginx:x:997:995:nginx user:/var/cache/nginx:/sbin/nologin
22 tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
这就是a
和 i
的区别
其余的跟上面的查找是一样的,先定位位置,再插入行
比如说
在nobody行后面追加一行
[root@centos ~]# cat -n mypassword | sed '/nobody/axxxxxxxxxxxxxxxxxxxxxxxxxx' -
1 root:x:0:0:root:/root:/bin/bash
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
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 operator:x:11:0:operator:/root:/sbin/nologin
11 games:x:12:100:games:/usr/games:/sbin/nologin
12 ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
13 nobody:x:99:99:Nobody:/:/sbin/nologin
xxxxxxxxxxxxxxxxxxxxxxxxxx
14 systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
15 dbus:x:81:81:System message bus:/:/sbin/nologin
16 polkitd:x:999:998:User for polkitd:/:/sbin/nologin
17 sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
18 postfix:x:89:89::/var/spool/postfix:/sbin/nologin
19 chrony:x:998:996::/var/lib/chrony:/sbin/nologin
20 lihg:x:1000:1000:lihg:/home/lihg:/bin/bash
21 nginx:x:997:995:nginx user:/var/cache/nginx:/sbin/nologin
22 tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
3.3 删除
主要用到命令
d
删除2到15行
[root@centos ~]# cat -n mypassword | sed '2,15d' -
1 root:x:0:0:root:/root:/bin/bash
16 polkitd:x:999:998:User for polkitd:/:/sbin/nologin
17 sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
18 postfix:x:89:89::/var/spool/postfix:/sbin/nologin
19 chrony:x:998:996::/var/lib/chrony:/sbin/nologin
20 lihg:x:1000:1000:lihg:/home/lihg:/bin/bash
21 nginx:x:997:995:nginx user:/var/cache/nginx:/sbin/nologin
22 tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
删除 带有 /sbin/nologin 的行
[root@centos ~]# cat -n mypassword | sed '/\/sbin\/nologin/d' -
1 root:x:0:0:root:/root:/bin/bash
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
20 lihg:x:1000:1000:lihg:/home/lihg:/bin/bash
3.4 修改
修改的话,分为按行替换 和 按关键字替换
按行替换 就是 用命令 c
带有 /sbin/nologin 的行,替换成xx
[root@centos ~]# cat -n mypassword | sed '/\/sbin\/nologin/c xx' -
1 root:x:0:0:root:/root:/bin/bash
xx
xx
xx
xx
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
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
20 lihg:x:1000:1000:lihg:/home/lihg:/bin/bash
xx
xx
按关键字替换用
sed 's/aaa/bbb/g file'
把/sbin/nologin 替换成 /bin/bash
[root@centos ~]# cat -n mypassword | sed 's/\/sbin\/nologin/\/bin\/bash/g' -
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/bin/bash
3 daemon:x:2:2:daemon:/sbin:/bin/bash
4 adm:x:3:4:adm:/var/adm:/bin/bash
5 lp:x:4:7:lp:/var/spool/lpd:/bin/bash
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:/bin/bash
10 operator:x:11:0:operator:/root:/bin/bash
11 games:x:12:100:games:/usr/games:/bin/bash
12 ftp:x:14:50:FTP User:/var/ftp:/bin/bash
13 nobody:x:99:99:Nobody:/:/bin/bash
14 systemd-network:x:192:192:systemd Network Management:/:/bin/bash
15 dbus:x:81:81:System message bus:/:/bin/bash
16 polkitd:x:999:998:User for polkitd:/:/bin/bash
17 sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/bin/bash
18 postfix:x:89:89::/var/spool/postfix:/bin/bash
19 chrony:x:998:996::/var/lib/chrony:/bin/bash
20 lihg:x:1000:1000:lihg:/home/lihg:/bin/bash
21 nginx:x:997:995:nginx user:/var/cache/nginx:/bin/bash
22 tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/bin/bash