day17-sed命令

9469008-102e11ad23bf1b31.png
image.png

环境准备

[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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值