前面的基本用法已经可以满足90%的需要,人个认为想要真正掌握sed,还需要学习一下sed的高级用法,本节就详细讲解一下sed的模式空间和保持空间

前面基本用法中也有提到模式空间,即为处理文件中一行内容的一个临时缓冲区。处理完一行之后就会把模式空间中的内容打印到标准输出,然后自动清空缓存。

而这里说的保持空间是sed中的另外一个缓冲区,此缓冲区正如其名,不会自动清空,但也不会主动把此缓冲区中的内容打印到标准输出中。而是需要以下sed命令进行处理:

  • d     Delete pattern space.  Start next cycle.    删除pattern space的内容,开始下一个循环.
  • h、 H    Copy/append pattern space to hold space.   复制/追加pattern space的内容到hold space.
  • g、 G    Copy/append hold space to pattern space.   复制/追加hold space的内容到pattern space.
  • x      Exchange the contents of the hold and pattern spaces.    交换hold space和pattern space的内容.

下面以一个例子来说明上面命令的用法,例如有一个文件,我们可以用tac命令反序打印出文件的内容,其实用sed的话也可以实现,这里先将结果列出,再详细讲解

不错就是一行命令就可实现:

sed '1!G;h;$!d' file

通过下面的讲解大家可以了解到sed的处理机制以及处理过程:

说明:

  • 第一行左边为文件内容,箭头所指为sed当前处理的行,右侧为sed命令;
  • 后面三行左侧绿色为模式空间内容,右侧蓝色为保持空间内容。
  • 每次sed只读取文件中一行到模式空间,即每次执行sed命令前,模式空间中只有文件中当前处理行内容,这一点没有在图中表现。
  • 每一行表示一个命令处理完后两个空间中的内容

困为每一步骤都很清楚,所以只把执行的结果以图形表示,不做说明,可以对照前面对sed命令的说明,以加深理解

1,读取文件的行一行"First"进行处理,最后一个命令将模式空间内容删除,所以不会在屏幕上打印内容

2,读取第二行“Sencond”进行处理,最后一个命令将模式空间内容删除,所以不会在屏幕上打印内容

3,读取第三行“three”进行处理,注意sed处理完之后会把,会把模式空间中内容打印到屏幕并自动清空模式空间(这个没在图中表现)

其实这个功能还可以用下面命令实现:

sed -n '1!G;h;$p' file

说明:

-n: 表示不输出sed的处理结果,而想要输出,则需要要显示的用“p”命令

其实sed的高级命令还有几个,可以分为三组,后续有机会再学习其他两组命令:

  1. 处理多行模式空间(N、D、P)。
  2. 采用保持空间来保存模式空间的内容并使它可用于后续的命令(H、h、G、g、x)。
  3. 编写使用分支和条件指令的脚本来更改控制流(:、b、t)。

sed模式空间(pattern space)和保持空间(hold space)相关推荐

  1. linux 64位内存划分,linux 64位内存空间大小?(linux 64 bits memory space size? [closed])

    linux 64位内存空间大小?(linux 64 bits memory space size? [closed]) 在Linux 32bit中,内核占用1GB的内存,而用户空间将占用剩余的gigs ...

  2. 二十一世纪大学英语读写教程(第三册)学习笔记(原文)——9 - Space Politics(空间政治)

    Unit 9 - Space Politics(空间政治) Space Politics It is expected that the discovery of possible life-form ...

  3. oracle 空间 链接,Oracle 自动段空间管理(ASSM:auto segment space management)

    二. ASSM说明 在Orale 9i以前,表的剩余空间的管理与分配都是由链接列表freelist来完成的,因为freelist存在串行的问题因此容易引起往往容易引起段头的争用与空间的浪费(其实这一点 ...

  4. 频繁模式(frequent pattern)

    Datawhale 频繁模式(frequent pattern) 频繁模式一般是指频繁地出现在数据集中的模式.这种频繁模式和关联规则是数据挖掘中想要挖掘的知识. 我们都知道一个很有趣的故事,就是啤酒和 ...

  5. 增大mysql修改表空间_扩充数据库表空间

    ALTER TABLESPACE ADD DATAFILE , [REUSE] NEXT MAXSIZE <>中是你要填的内容,有|是选其一. 如:增加文件是d:\dbfs\mydatab ...

  6. oracle表空间文件离线,oracle 表空间 数据文件 笔记

    数据文件命令 Enabling and Disabling Automatic Extension for a Datafile: ALTER TABLESPACE users ADD DATAFIL ...

  7. C++设计模式——原型模式(Prototype Pattern)

    C++设计模式--原型模式(Prototype Pattern) 微信公众号:幼儿园的学霸 目录 文章目录 C++设计模式--原型模式(Prototype Pattern) 目录 定义 代码示例 普通 ...

  8. liunx清空磁盘空间_为什么清空磁盘空间可以加速计算机?

    liunx清空磁盘空间 When learning more about computers and how they work, you will occasionally run across s ...

  9. oracle 10g磁盘管理,Oracle 10g UNDO表空间过大导致磁盘空间不足的解决

    在Oracle 10g数据库的应用中,出现了UNDO表空间过大导致磁盘空间不足而崩溃的现象(ORA-30036: unable to extend segment by 8 in undo table ...

最新文章

  1. SIGIR|乘风破浪的AI华人学者们
  2. Docker registry
  3. linux cat pdf文件怎么打开,linux下cat 命令使用详解:显示文件内容
  4. buffers和cache的区别
  5. redis存储java对象存储_Spring-Data-Redis存储对象(redisTemplate)
  6. pytorch 之 冻结某层参数,即训练时不更新
  7. List去除重复的元素
  8. [html] 移动端布局的自适应如何做?
  9. python元组索引_Python—范围元组中的元素索引
  10. linux 采集 bash 脚本,Linux shell脚本攻略(2)
  11. Android Q 修改Fingerprint
  12. [Golang] Goland 编辑器 替换快捷键
  13. exchange创建邮箱组_Exchange 2013学习笔记四:新建用户邮箱
  14. php随机名人名言,php随机输出名人名言 实现代码
  15. 思考的救赎(一):三消游戏实现探索
  16. 使用 LaTeX 制作幻灯片
  17. 【Kaggle】 Russia房产价格预测top1%(22/3270)方案总结
  18. 基于NMF的推荐系统实例
  19. [Go实战]怎么写测试类,运用testing.T
  20. 深入剖析优惠券核心架构设计

热门文章

  1. usb5-写成usb驱动
  2. C#多线程函数如何传参数和返回值
  3. 优化安卓应用内存的神奇方法以及背后的原理,一般人我不告诉他
  4. Watson使用指南(三)
  5. 使用Spring AOP中MethodInterceptor记录日志
  6. 在html页面提交值到动态页面时出现中文值为乱码的解决方案
  7. Execl导入问题之文本转换
  8. 二层交换机的MAC表学习过程
  9. SQL Servr 2008空间数据应用系列三:SQL Server 2008空间数据类型
  10. 北京工业计算机考研科目,2020北京工业大学计算机考研初试科目、参考书目、招生人数汇总...