sed高级用法

sed高级用法

sed高级用法:模式空间与保持空间

模式空间:sed处理文本内容行的一个临时缓冲区,模式空间中的内容会主动打印到标准输出,并自动清空模式空间

保持空间:sed处理文本内容行的另一个临时缓冲区,不同的是保持空间内容不会主动清空,也不会主动打印到标准输出,而是需要sed命令来进行处理

模式空间与保持空间的关系

名称 概念
模式空间(pattern space) 相当于流水线,文本行在模式空间中进行处理;
保持空间(hold space) 相当于仓库,在模式空间对数据进行处理时,可以把数据临时存储到保持空间;作为模式空间的一个辅助临时缓冲区,但又是相互独立,可以进行交互,命令可以寻址模式空间但是不能寻址保持空间。

hold:(H|h)(追加|覆盖)到保持空间
get:(G|g)(追加|覆盖)到模式空间

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

N多行命令

多行**Next (N)**命令通过读取新的输入行,并将它添加到模式空间的现有内容之后来创建多行模式空间。模式空间最初的内容和新的输入行之间用换行符分隔。在模式空间中嵌入的换行符可以利用转义序列“\n”来匹配。在多行模式空间中,元字符“^”匹配空间中的第一个字条,而不匹配换行符后面的字符。同样,“$”只匹配模式空间中最后的换行符,而不匹配任何嵌入的换行符。在执行next命令之后,控制将被传递给脚本中的后续命令。

Next命令与next命令不同,next输出模式空间的内容,然后读取新的输入行。next命令不创建多行模式空间。

示例:

  • 将第一行与第二行合并为一行
[root@apache ~]# cat abc 
hell
o wor
 d tom
[root@apache ~]# sed '/hell/N;s/\n//' abc   //匹配‘hell’将匹配行与其下一行并入一行放入多行模式空间,将换行替换为空值
hello wor
 d tom
 
  • 将三行并为一行
[root@apache ~]# cat abc 
hell
o wor
 d tom
[root@apache ~]# sed '/hell/N;s/\n//;N;s/\n //' abc 
hello word tom

  • 使用 -f 指定文件
[root@apache ~]# cat abc 
hell
o wor
 d tom
[root@apache ~]# cat test.sh 
/hell/ {
   
N
s/\n// 
}
[root@apache ~]# sed -f test.sh abc 
hello wor
 d tom
[root@apache ~]# cat abc 
hell
o wor
 d tom
[root@apache ~]# cat test.sh 
/hell/ {
   
N
s
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值