第四周day18-三剑客-sed

在这里插入图片描述

三剑客——sed(增删改查)

我们先来回顾下老三—grep的参数

grep 过滤
	-i
		不区分大小写
	-v
		取反
	-n
		显示行号
	-o
		显示每次grep匹配到的内容
	-E
		支持扩展正则
		egrep
	-w
		按照单词匹配
	-A
		显示grep找出的内容下几行
	-B
		显示grep找出的内容上几行
	-C
		同时显示grep找出的内天上下几行
	-l
		过滤时只显示文件名 不显示内容
	-R
		递归进行过滤
		grep -Rl 'oldboy'

sed—> stream editor 流编辑器

p d s c a i 主要的几个参数

在这里插入图片描述
https://www.processon.com/view/link/5bea32c5e4b0ad314e894f53
1.读取文件(从文件或管道)的第1行
2.读取到sed使用的内存区域中(模式空间)
3.进行判断这一行是否是我要的

1.如果是则则执行对应的命令(p d c a i s )
2.如果不是则读取下一行(注如果没加上-n sed会默认显示这行内容(模式空间内容))

※功能——增删改查

sed的参数
-n  取消默认输出
-l	修改文件内容
-r	支持扩展正则
-i.bak	先备份文件再修改文件内容

#sed命令执行过程

在这里插入图片描述https://www.processon.com/view/link/5cb7ede9e4b01941c8b13036

※我们在练习的时候要先创建好一个环境

[✡root@oldboy /tmp]# grep -n ‘.*’ lidao.txt
1:101,oldboy,CEO
2:102,zhangyao,CTO
3:103,Alex,COO
4:104,yy,CFO
5:105,feixue,CIO
6:110,lidao,COCO
\\空行

查看 p
---->print 根据行号进行查找
---->‘3,6p’ 根据行号范围进行查找
---->’/oldb.y/p’使用正则进行过滤
---->’/102/,/105/p’ 使用正则表示范围

查看第五行
[✡root@oldboy /tmp]# sed -n '5p' lidao.txt 
105,feixue,CIO
查看第一行到第五行
[✡root@oldboy /tmp]# sed -n '1,5p' lidao.txt 
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
过滤a-z的行,类似grep
[✡root@oldboy /tmp]# sed -n '/[a-z]/p' lidao.txt 
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
110,lidao,COCO
找出带有oldboy和yy的行
第一种方法sed
[✡root@oldboy /tmp]# sed -rn '/oldbo|yy/p' lidao.txt 
101,oldboy,CEO
104,yy,CFO
第二种方法grep和egrep
[?root@oldboy /tmp]# grep 'oldboy\|yy' lidao.txt 
101,oldboy,CEO
104,yy,CFO
[?root@oldboy /tmp]# egrep 'oldboy|yy' lidao.txt 
101,oldboy,CEO
104,yy,CFO
找到以old开头CFO结尾的行
[✡root@oldboy /tmp]# sed -n '/old/,/CFO/p' lidao.txt 
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
102开头的行和没有的内容,显示102开始到下面所有内容
[✡root@oldboy /tmp]# sed -n '/102/,/#没有的内容#/p' lidao.txt 
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
110,lidao,COCO

增加
---->a 追加 在指定行后追加内容
---->i 追加 插入指定行的上面
---->c 把这一行内容先清空,再写入

给第三行下添加119,SB,UFO(显示临时)  
[?root@oldboy /tmp]# sed '3a119,SB,UFO' lidao.txt 
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,COO
119,SB,UFO
104,yy,CFO
105,feixue,CIO
110,lidao,COCO
给第三行下永久添加119,SB,UFO
[✡root@oldboy /tmp]# sed -i '3a119,SB,UFO' lidao.txt 
[✡root@oldboy /tmp]# cat lidao.txt 
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,COO
119,SB,UFO
104,yy,CFO
105,feixue,CIO
110,lidao,COCO
在第一行上添加101,oldboy,CEO 
[✡root@oldboy /tmp]# sed -i '1i101,oldboy,CEO' lidao.txt
[✡root@oldboy /tmp]# grep '.*' lidao.txt 
101,oldboy,CEO
101,oldboy,CEO
102,zhangyao,CTO
101,oldboy,CEO
103,Alex,COO
120,XOO
104,yy,CFO
105,feixue,CIO
在源文件第四行下添加120,chenxing,备份一份到当前目录lidao.txt.bak
[✡root@oldboy /tmp]# sed -i.bak '4a120,chenxing,XOO' lidao.txt 
[✡root@oldboy /tmp]# ll lidao.txt.bak 
-rw-r--r-- 1 root root 106 Apr 25 16:00 lidao.txt.bak
[✡root@oldboy /tmp]# cat lidao.txt.bak  \\备份的文件未添加,在源文件添加了新内容
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,COO
119,SB,UFO
104,yy,CFO
105,feixue,CIO
110,lidao,COCO

删除
---->d 删除指定空行

删除第四行
[✡root@oldboy /tmp]# sed '4d' lidao.txt
oldboy,CEO
102,zhangyao,CTO
103,Alex,COO
120,chenxing,XOO
120,XOO
104,yy,CFO
105,feixue,CIO
110,lidao,COCO
删除lidao.txt中的空行
第一种显示空行
[✡root@oldboy /tmp]# sed -n '/^$/p' lidao.txt
\\空行
[✡root@oldboy /tmp]# 

第二种不显示空行
[?root@oldboy /tmp]# sed -r '/^$/d' lidao.txt
oldboy,CEO
102,zhangyao,CTO
103,Alex,COO
119,SB,UFO
120,chenxing,XOO
120,XOO
104,yy,CFO
105,feixue,CIO
110,lidao,COCO
[?root@oldboy /tmp]# 

第三种取反!
[✡root@oldboy /tmp]# sed -n '/^$/!p' lidao.txt
oldboy,CEO
102,zhangyao,CTO
103,Alex,COO
119,SB,UFO
120,chenxing,XOO
120,XOO
104,yy,CFO
105,feixue,CIO
110,lidao,COCO
[✡root@oldboy /tmp]# 

第四种awk的方法
[✡root@oldboy /tmp]# awk '/^$/' lidao.txt  \\显示空行

[✡root@oldboy /tmp]# 
[✡root@oldboy /tmp]# awk '!/^$/' lidao.txt  \\不显示空行
oldboy,CEO
102,zhangyao,CTO
103,Alex,COO
119,SB,UFO
120,chenxing,XOO
120,XOO
104,yy,CFO
105,feixue,CIO
110,lidao,COCO
[✡root@oldboy /tmp]# 

↓↓不显示文件/etc/ssh/sshd_config 的空行或以#号开头的行↓↓

1.egrep
[✡root@oldboy /tmp]# egrep -v '^$|^#' /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
[✡root@oldboy /tmp]# 
2.sed
[✡root@oldboy /tmp]# sed -nr '/^$|^#/!p' /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
[✡root@oldboy /tmp]# 
3.awk
[✡root@oldboy /tmp]# awk '!/^$|^#/' /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
[✡root@oldboy /tmp]# 
4.筛选掉a-Z开头的,空行多的时候不适用
[?root@oldboy /tmp]# grep '^[a-Z]' /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
[?root@oldboy /tmp]# 

替换修改
---->s替换
---->g全局替换:
---->()后向引用在前面(##)把你要的内容保护起来,在后面俩个##之间通过/数字来引用,\1表示显示第一个括号内容

※格式
s#内容#内容#g
s@内容@内容@g
s/内容/内容/g
echo 123456 |sed ‘s#123456#<123456>#g’
echo 123456 |sed ‘s@123456@<123456>@g’

把oldboy替换为alex
[?root@oldboy /tmp]# sed 's#oldboy#alex#g' lidao.txt
alex,CEO
102,zhangyao,CTO
103,Alex,COO
119,SB,UFO
120,chenxing,XOO
120,XOO
104,yy,CFO
105,feixue,CIO
110,lidao,COCO
把oldboy替换为空/删除
[✡root@oldboy /tmp]# sed 's#oldboy##g' lidao.txt
,CEO
102,zhangyao,CTO
103,Alex,COO
119,SB,UFO
120,chenxing,XOO
120,XOO
104,yy,CFO
105,feixue,CIO
110,lidao,COCO

想要结果是<123456>
1.
[?root@oldboy /tmp]# echo 123456 |sed 's#123456#<123456>#g'
<123456>
2.
[✡root@oldboy /tmp]# echo 123456  |sed -r 's#(.)#\1#g'
123456
显示出12<34>56
1.
[?root@oldboy /tmp]# echo 123456  |sed -r 's#(12)(34)(56)#\1<\2>\3#g'
12<34>56
2.
[✡root@oldboy /tmp]# echo 123456  |sed -r 's#(3.)#<\1>#g'
12<34>56
显示<1><2><3><4><5><6>
1.
[✡root@oldboy /tmp]# echo 123456  |sed -r 's#(.)#<\1>#g'
<1><2><3><4><5><6>
2.
[✡root@oldboy /tmp]# echo 123456  |sed -r 's#(.)(.)(.)(.)(.)(.)#<\1><\2><\3><\4><\5><\6>#g'
<1><2><3><4><5><6>

在这里插入图片描述https://www.processon.com/view/link/5cb7ede9e4b01941c8b13036

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值