sed高级用法

sed高级用法

模式空间和保持空间

模式空间是sed命令中默认用于存储当前处理的文本行的缓冲区。当sed读取输入文件的一行时,该行会被存储在模式空间中。sed命令会对模式空间中的文本进行处理,可以使用各种sed命令对其进行编辑、替换、删除等操作。完成处理后,sed会将模式空间的内容输出到标准输出,并读取下一行进行处理。

保持空间是一个额外的缓冲区,用于存储临时数据或在处理多行文本时保存部分文本。可以使用sed的"H"命令将模式空间的内容复制到保持空间中,使用"g"命令将保持空间的内容复制回模式空间中。

h : 把模式空间中的内容覆盖至保持空间中
H :把模式空间中的内容追加至保持空间中
g : 把保持空间中的内容覆盖至模式空间中
G :把保持空间中的内容追加至模式空间中
n : 读取下一行覆盖模式空间中的行
N :读取下一行并追加到模式空间中的行后面,使用\n分隔
D :删除模式空间的第一行,不读入下一行
d :删除模式空间中的所有行,并读入下一行

多行删除

d和D的区别:

D命令用于删除模式空间中的文本行的第一部分。它的工作方式是删除模式空间中的第一行,然后将剩余的文本行保留在模式空间中,继续进行后续的sed命令处理。如果在删除第一行后,模式空间中仍然有文本行,sed会返回到命令的开头重新处理模式空间中的文本行。这使得D命令可用于处理多行文本。

d命令用于删s匹配某个模式的文本行。

示例

[root@localhost ~]# cat llao 
456

asrsae


zxcvz



plplp
Why are you so skilled?
pure "oxygen"
asd
[root@localhost ~]# sed '/^$/{N;/^\n$/d}' llao   //使用d
456

asrsae
zxcvz

plplp
Why are you so skilled?
pure "oxygen"
asd
[root@localhost ~]# sed '/^$/{N;/^\n$/D}' llao  //使用D
456

asrsae

zxcvz

plplp
Why are you so skilled?
pure "oxygen"
asd

多行打印

p命令用于将匹配某个模式的文本行打印出来。

P命令用于将模式空间中的文本行的第一部分打印出来。它的工作方式是将模式空间中的第一行打印出来,然后删除该行,保留剩余的文本行在模式空间中,继续进行后续的sed命令处理。如果在打印第一行后,模式空间中仍然有文本行,sed会返回到命令的开头重新处理模式空间中的文本行。这使得P命令可用于处理多行文本。

示例

[root@localhost ~]# cat llao 
456
asrsae
zxcvz
Why are you so skilled?
pure "oxygen"
asd
[root@localhost ~]# sed '/skilled?$/{N;/skilled?\n/{s/skilled?\n/skilled /;P}}' llao
456
asrsae
zxcvz
Why are you so skilled pure "oxygen"
Why are you so skilled pure "oxygen"
asd
[root@localhost ~]# sed '/skilled?$/{N;/skilled?\n/{s/skilled?\n/skilled /;P;D}}' llao 

456
asrsae
zxcvz
Why are you so skilled pure "oxygen"
asd

互换保持空间和模式空间里的内容

h : 把模式空间中的内容覆盖至保持空间中
H :把模式空间中的内容追加至保持空间中
g : 把保持空间中的内容覆盖至模式空间中
G :把保持空间中的内容追加至模式空间中

追加就是不覆盖原来的文本,覆盖就会删除原来的文本

这边不一一展示,有例子可以很好说明

大写转换

[root@localhost ~]# cat llao    //将skilled转为大写
456
asrsae
zxcvz
Why are you so skilled?
pure "oxygen"
asd
[root@localhost ~]# sed -r '/so .*\?/{h;s/.*so (.*)\?/\1/;y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/;G;s/(.*)\n(.*so ).*(\?)/\2\1\3/g}' llao 
456
asrsae
zxcvz
Why are you so SKILLED?
pure "oxygen"
asd
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值