Sed是一种流式编辑器,是针对文档的行来操作的。它是文本处理中常用的工具,能够完美的配合正则表达式使用。比起grep/egrep来,功能更加强大。
▌sed命令的基本用法: sed [-nefri] ‘command’ filename
▎常用选项:
-n :只有经过sed 特殊处理的那一行才会被列出来;
-e :可以多点编辑;
-r :sed 的动作支持的脱意;
-i :直接修改读取的文件内容,而不是输出到终端。
▎常用命令:
d :删除对应行;
p :打印。通常会与参数 sed -n协同使用;
s :替换。配合g表示全部替换。
1、查找
1)特殊字符匹配:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
[root@server01 test1]
# sed -n '/r.t/'p passwd
operator:x:11:0:operator:
/root
:
/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:
/var/empty/sshd
:
/sbin/nologin
[root@server01 test1]
# sed -n '/ro*t/'p passwd
root:x:0:0:root:
/root
:
/bin/bash
operator:x:11:0:operator:
/root
:
/sbin/nologin
[root@server01 test1]
# sed -n '/ro*t/'Ip passwd ##“I”忽略大小写
root:x:0:0:root:
/root
:
/bin/bash
operator:x:11:0:operator:
/root
:
/sbin/nologin
Root:x:0:0:Root:
/Root
:
/bin/bash
[root@server01 test1]
# sed -nr '/r+at/'p passwd ##“r”表示脱意
operator:x:11:0:operator:
/root
:
/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:
/var/empty/sshd
:
/sbin/nologin
[root@server01 test1]
# sed -nr '/o{2}/'p passwd
root:x:0:0:root:
/root
:
/bin/bash
lp:x:4:7:lp:
/var/spool/lpd
:
/sbin/nologin
mail:x:8:12:mail:
/var/spool/mail
:
/sbin/nologin
operator:x:11:0:operator:
/root
:
/sbin/nologin
postfix:x:89:89::
/var/spool/postfix
:
/sbin/nologin
[root@server01 test1]
# sed -nr '/root|login/'p passwd
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
......
sshd:x:74:74:Privilege-separated SSH:
/var/empty/sshd
:
/sbin/nologin
postfix:x:89:89::
/var/spool/postfix
:
/sbin/nologin
chrony:x:997:995::
/var/lib/chrony
:
/sbin/nologin
|
2)打印指定行:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
[root@server01 test1]
# sed -n '3'p passwd
daemon:x:2:2:daemon:
/sbin
:
/sbin/nologin
[root@server01 test1]
# sed -n '3,5'p passwd
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
[root@server01 test1]
# sed -n '20,$'p passwd
postfix:x:89:89::
/var/spool/postfix
:
/sbin/nologin
chrony:x:997:995::
/var/lib/chrony
:
/sbin/nologin
[root@server01 test1]
# sed -e '20,$'p -e '/lib/'p -n passwd ##单个命令执行多个动作
postfix:x:89:89::
/var/spool/postfix
:
/sbin/nologin
chrony:x:997:995::
/var/lib/chrony
:
/sbin/nologin
#同样的行,第一次#
chrony:x:997:995::
/var/lib/chrony
:
/sbin/nologin
#同样的行,第二次#
|
2、删除
1
2
3
4
5
|
[root@server01 test1]
# sed -i '10,$'d passwd ##删除第10行到最后一行
[root@server01 test1]
# wc -l passwd
9
passwd
[root@server01 test1]
# sed -i '/root/'d passwd ##删除带root关键词的行
[root@server01 test1]
# grep 'root' passwd
|
3、替换
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
[root@server01 test1]
# sed '1,3s/root/ROOT/' passwd
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
[root@server01 test1]
# sed '1,3s/root/ROOT/g' passwd ##“g”表示全部匹配项
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
......
[root@server01 test1]
# sed 's/\(root\)\(.*\)\(bash\)/\3\2\1/' passwd
bash
:x:0:0:root:
/root
:
/bin/root
##调换两个字符串的位置
bin:x:1:1:bin:
/bin
:
/sbin/nologin
......
[root@server01 test1]
# sed -r 's#([^:]+):(.*):([^:]+)#\3\2\1#g' passwd
/bin/bashx
:0:0:root:
/rootroot
/sbin/nologinx
:1:1:bin:
/binbin
/sbin/nologinx
:2:2:daemon:
/sbindaemon
......
[root@server01 test1]
# sed 's/[0-9]//g' passwd ##删除所有数字
root:x:::root:
/root
:
/bin/bash
bin:x:::bin:
/bin
:
/sbin/nologin
daemon:x:::daemon:
/sbin
:
/sbin/nologin
......
[root@server01 test1]
# sed -r 's/(^root)/#&/g' passwd ##所有root开头的行注释掉
#root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:
/bin
:
/sbin/nologin
daemon:x:2:2:daemon:
/sbin
:
/sbin/nologin
......
|
以上是sed最简单的命令使用技巧。学习很容易,熟练很难,平时还是需要多加练习。