sed进阶用法

sed进阶用法


pattern space(模式空间)and hold space (保持空间)

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

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


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

模式空间:相当于流水线,文本行再模式空间中进行处理;

保持空间:相当于仓库,在模式空间对数据进行处理时,可以把数据临时存储到保持空间;作为模式空间的一个辅助临时缓冲区,但又是相互独立,可以进行交互,命令可以寻址模式空间但是不能寻址保持空间。可以使用高级命令h,H,g,G与模式空间进行交互。


sed [- option]

-n 使用安静模式.则只有经过sed特殊处理的哪一行才会显示出来
-f file 从指定文件中读取编辑脚本
-r 支持使用拓展的正则表达式
-i 直接修改文件(替换原文件)


基本用法

  • n 读取下一个输入行,用下一个命令处理新的行而不是用第一个命令(这里的n不是sed -n)
[root@localhost practise]# cat 123 
1
2
3
4
5
6
[root@localhost practise]# sed  -n '2n;p' 123 # -n取消自动打印模式空间(取消默认的输出,不输出到屏幕)
1
3
4
5
6
#在循环到文件第二行的时候跳过然后读入第三行打印,后面的依次打印,因为2n代表的是在读入文件
#第二行的时候才执行n命令,其余行的时候都是正常执行打印操作
  • N追加下一个输入行到模板块后面并在二者间嵌入一个新行,改变当前行号码,追加匹配到的行的下一行至模式空间
[root@localhost practise]# cat 123 
1
2
3
4
5
6
[root@localhost practise]# sed  -n 'N;p' 123 
1
2
3
4
5
6
  • a在当前行下面插入文本
[root@localhost practise]# cat 123 
1
2
3
[root@localhost practise]# sed '3a4' 123 #在第三行下面添加4
1
2
3
4
  • i在当前行上面插入文本
[root@localhost practise]# cat 123 
1
2
3
[root@localhost practise]# sed '3inmd' 123 #在第三行插入nmd
1
2
nmd
3
  • c把选定的行改为新的文本
[root@localhost practise]# cat 123 
1
2
3
[root@localhost practise]# sed '2ctwo' 123 #将第二行修改成two
1
two
3
[root@localhost practise]# sed '/2/ctwo' 123 #将匹配到的参数修改成two
1
two
3
  • y表示把一个字符翻译为另外的字符,替换字符和被替换字符长度要一样(但是不用于正则表达式)
[root@localhost practise]# cat 123 
1
2
3
[root@localhost practise]# sed  'y/1/0/' 123 #将1替换成0
0
2
3
  • d删除,删除选择的行
[root@localhost practise]# cat 123 
one
2
3
[root@localhost practise]# sed '2d' 123 #将第二行删除
one
3
[root@localhost practise]# sed '/3/d' 123 #将匹配到的参数删除
one
2

高级编辑命令

h:把模式空间中的内容复制(覆盖)到保持空间中
H:把模式空间中的内容追加到保持空间中
g:从保持空间中取出数据覆盖至模式空间
G:从保持空间取出内容追加至模式空间
x:把模式空间中的内容和保持空间中的内容进行互换
n:读取匹配到的行的下一行至模式空间
N:追加匹配到的行的下一行至模式空间
d:删除模式空间中的行
D:删除多行模式空间中的所有行
p :打印当前模式空间内容,一般一行会显示两次,sed后面加上-n就不会了,通常 p 会与参数 sed -n 一起使用
P:打印当前模式空间开端至\n的内容,并追加到默认输出之前

[root@localhost practise]# cat 123 
1
2
3
//将1复制到保持空间,匹配到3时将保持空间的内容追加到模式空间
[root@localhost practise]# sed '/1/{h};/3/{G}' 123 
1
2
3
1
//将1追加到保持空间,匹配到3时将保持空间的内容追加到模式空间
//有一行空行是因为原本保持空间是空的,所以追加回模式空间就用空行填充了
[root@localhost practise]# sed '/1/{H};/3/{G}' 123 
1
2
3

1
//将1复制到保持空间并删除模式空间的1,匹配到2时将保持空间的内容复制到模式空间
//内容为1,3原因是我将1复制到保持空间又删除了,所以保持空间的状态为空,匹配到2时将保持空间的内容复制回模式空间,而保持空间什么都没有,所以输出出来的只有1和3
[root@localhost practise]# sed '/1/{h;d};/2/{g}' 123 
1
3
1
//将1复制到保持空间并删除模式空间的1,匹配到2时将保持空间的内容复制到模式空间
//内容为1,3原因是我将1复制到保持空间又删除了,所以保持空间的状态为空,匹配到2时将保持空间的内容复制回模式空间,而保持空间什么都没有,所以输出出来的只有1和3
[root@localhost practise]# sed '/1/{h;d};/2/{g}' 123 
1
3
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

随便投投

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值