环境准备
[root@oldboy ~]# cat >>fanzhi.txt<<EOF
> 101,oldboy,CEO
> 102,zhangyao,CTO
> 103,Alex,COO
> 104,yy,CFO
> 105,feixue,CIO
> 110,lidao,COCO
> EOF
sed命令查找
查找指定的行
[root@oldboy ~]# sed -n '3p' #fanzhi.txt##查找显示第三行
oldboy
[root@oldboy ~]# sed -n '1,5p' fanzhi.txt##查找显示第一行到底5行
FANZHI
fanzhi
oldboy
gelong GELONG
过滤出指定的行
[root@oldboy ~]# sed -n '/[a-z]/p' fanzhi.txt##查找出包含a-z(26个字母)这个范围行
fanzhi
oldboy
gelong GELONG
oldgirg
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
110,lidao,COCO
[root@oldboy ~]# sed -nr '/oldboy|yy/p' fanzhi.txt##查找出包含oldboy或者yy的行
oldboy
101,oldboy,CEO
104,yy,CFO
grep 命令实现
[root@oldboy ~]# grep 'oldboy\|yy' fanzhi.txt
oldboy
101,oldboy,CEO
104,yy,CFO
这里的例子包含扩展正则符号,不适用egrep也可以实现的原因是因为给|符号使用了转义符号。了解即可。
取一个范围的的字符串
[root@oldboy ~]# sed -n '/102/,/105/p' fanzhi.txt##查找出包含102到第一个包含105的行
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
sed增加
追加到指定行下面的一行
[root@oldboy ~]# sed '3a fanzhibaba' fanzhi.txt##追加到第三行后面
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,COO
fanzhibaba
104,yy,CFO
105,feixue,CIO
110,lidao,COCO
插入到指定行
[root@oldboy ~]# sed '1i12306,fanzhi,HO' fanzhi.txt#插入第一行
12306,fanzhi,HO
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
110,lidao,COCO
先清空指定行再写入
[root@oldboy ~]# sed '1c12306,fanzhi,HO' fanzhi.txt#删除指定行再写入
12306,fanzhi,HO
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
110,lidao,COCO
删除
原始文件
[root@oldboy ~]# cat -n fanzhi.txt##原始文件里有空行
1 FANZHI
2 fanzhi
3 oldboy
4 gelong GELONG
5
6 oldgirg
7 101,oldboy,CEO
8 102,zhangyao,CTO
9 103,Alex,COO
10 104,yy,CFO
11 105,feixue,CIO
12 110,lidao,COCO
使用正则删除空行
[root@oldboy ~]# sed '/^$/d' fanzhi.txt|cat -n 1 FANZHI
2 fanzhi
3 oldboy
4 gelong GELONG
5 oldgirg
6 101,oldboy,CEO
7 102,zhangyao,CTO
8 103,Alex,COO
9 104,yy,CFO
10 105,feixue,CIO
11 110,lidao,COCO
使用正则显示空行并进行取反,达到删除空行的效果
[root@oldboy ~]# sed -n '/^$/!p' fanzhi.txt|cat -n 1 FANZHI
2 fanzhi
3 oldboy
4 gelong GELONG
5 oldgirg
6 101,oldboy,CEO
7 102,zhangyao,CTO
8 103,Alex,COO
9 104,yy,CFO
10 105,feixue,CIO
11 110,lidao,COCO
课堂练习:
原始文件
[root@oldboy ~]#cat /etc/ssh/sshd_config
……
省略若干
# Accept locale-related environment variables
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
AcceptEnv XMODIFIERS
# override default of no subsystems
Subsystem sftp /usr/libexec/openssh/sftp-server
# Example of overriding settings on a per-user basis
#Match User anoncvs
# X11Forwarding no
# AllowTcpForwarding no
# PermitTTY no
# ForceCommand cvs server
删除文件中包含#和空格的行
[root@oldboy ~]# sed -r '/^$|^#/d' /etc/ssh/sshd_config
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
SyslogFacility AUTHPRIV
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication yes
ChallengeResponseAuthentication no
GSSAPIAuthentication no
GSSAPICleanupCredentials no
UsePAM yes
X11Forwarding yes
UseDNS no
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
AcceptEnv XMODIFIERS
Subsystem sftp /usr/libexec/openssh/sftp-server
其他方法
sed -rn '/^$|^#/!p' /etc/ssh/sshd_config
egrep -v '^$|^#' /etc/ssh/sshd_config
awk '!/^$|^#/' /etc/ssh/sshd_config
对于这个配置文件还可以使用:grep '^[a-z] ' /etc/ssh/sshd_config
替换
原始文件
[root@oldboy ~]# cat /oldboy/oldboy.txt
I am oldboy teacher!
gebangfegn
I teacher linux.
gebangfegn
I teach linux.
I teacher linux.
把所有带oldboy的行替换成alex.
[root@oldboy ~]# sed 's#oldboy#alex#g' /oldboy/oldboy.txt
I am alex teacher!
I teacher linux.
gebangfegn
I teach linux.
I teacher linux.
课堂练习
[root@oldboy ~]# echo 123456 |sed -r 's#(.*)#<\1>#g'
<123456>
[root@oldboy ~]# echo 123456 |sed -r 's#(.)#<\1>#g'
<1><2><3><4><5><6>
[root@oldboy ~]# echo 123456 |sed -r 's#(..)(..)(..)#\1<\2>\3#g'
12<34>56