sed高级用法:模式空间(pattern space)和保持空间(hold space)

原创 2014年03月13日 00:54:09

环境:centos 6.4 

sed版本:sed-4.2.1-10.el6.x86_64


前面的基本用法已经可以满足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)。


shell脚本学习笔记 (sed的高级用法----模式空间和保持空间)

前段时间在学习shell脚本,上次有提到sed的模式空间和保持空间概念,但是一直没有研究好,这两天研究了一下,所以将它发出来,不是很全面,仅仅供大家参考一下。      保持空间sed在正常情况下,将...
  • zr1076311296
  • zr1076311296
  • 2016年04月29日 00:04
  • 4642

sed的模式空间和保持空间

sed之所以能以行为单位的编辑或修改文本,其原因在于它使用了两个空间:一个是活动的“模式空间(pattern space)”,另一个是起辅助作用的“保持空间(hold space)这2个空间的使用。 ...
  • wanglelelihuanhuan
  • wanglelelihuanhuan
  • 2016年06月06日 17:15
  • 1820

通过几个例子看sed的模式空间与保持空间

http://bbs.chinaunix.net/thread-157013-1-1.html 近来看到几个不是很常见,但是比较有用的sed例子,都和hold space与pattern space有...
  • bytxl
  • bytxl
  • 2013年09月18日 10:56
  • 1094

sed原理及sed命令格式 ,缓存区,模式空间

sed原理及sed命令格式  分类: 4.1            Sed工作原理   sed是一个非交互式的流编辑器。所谓非交互式,是指使用sed只能在命令行下输入...
  • samxx8
  • samxx8
  • 2014年09月04日 16:11
  • 2935

sed高级用法:模式空间(pattern space)和保持空间(hold space)

环境:centos 6.4  sed版本:sed-4.2.1-10.el6.x86_64 前面的基本用法已经可以满足90%的需要,人个认为想要真正掌握sed,还需要学习一下sed的高级用法,本节就...
  • cbbbc
  • cbbbc
  • 2015年08月10日 00:26
  • 631

sed高级用法:模式空间(pattern space)和保持空间(hold space)

环境:centos 6.4  sed版本:sed-4.2.1-10.el6.x86_64 前面的基本用法已经可以满足90%的需要,人个认为想要真正掌握sed,还需要学习一下se...
  • havedream_one
  • havedream_one
  • 2015年04月21日 08:53
  • 2756

sed命令简单使用-pattern space与hold space

sed是一个非交互式的流编辑器(stream editor)。所谓非交互式,是指使用sed只能在命令行下输入编辑命令来编辑文本,然后在屏幕上查看输出;而所谓流编辑器,是指sed每次只从文件(或输入)读...
  • yangkaiwxy
  • yangkaiwxy
  • 2012年02月06日 12:18
  • 668

SED多行模式空间

在前面看到的都是单行模式。每次sed处理一个行。 但是sed是允许一次处理多行的。这就是所谓的多行模式空间。 多行模式空间命令有(N、D、P),他们分别对应单行模式空间(n、d、p)。 分别是他...
  • imzoer
  • imzoer
  • 2013年03月30日 19:18
  • 14847

sed 多行替换,多行模式处理字符串;一次替换

作者:凨 例:
  • wljk506
  • wljk506
  • 2014年07月16日 11:45
  • 4032

sed提取模式内容

sed提取特定模式的内容
  • maray
  • maray
  • 2016年08月03日 11:56
  • 1828
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:sed高级用法:模式空间(pattern space)和保持空间(hold space)
举报原因:
原因补充:

(最多只允许输入30个字)