欢迎来到天天文库
浏览记录
ID:21935266
大小:75.69 KB
页数:6页
时间:2018-10-25
《sed的pattern space以及hold space》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、Patternspace和HoldspaceSed是对数据流进行操作的一个强大的工具,大家已经经常使用到sed对文本进行修改,替换。这里就不介绍sed的使用方法了,本文主要介绍sed中的Patternspace和Holdspace。理解了这两个概念有助于从本质上理解sed处理数据流的方式,尤其是像实现逆转、只输出奇数或偶数行等等功能,Patternspace和Holdspace即模式空间和保留空间(也可以称之为缓冲区),保留空间的初始为空,我们可以认为是一个空行。下面图示了sed中的输入流,输出流,模式空间以
2、及保留空间:先简单介绍下sed的一般工作模式(在没有利用到Holdspace的时候),patternspace每次从input中取一行数据到patternspace中,然后经过一些处理,将一行数据放入output中,然后output会输出到屏幕(默认为屏幕,也可以是文件)。记住,此时patternspace还储存着这一行数据,直到input再放入第二行数据取代第一行数据。当sed的命令为sed[-n]‘[hHgGx]p’file格式时,需要涉及到holdspace,其实我们可以简单的讲holdspace理解为
3、sed的一个缓冲区就好了,只是这个缓冲区不会直接进行输出,并且只有patternspace可以对其进行操作,放入或者拿出数据(如上图所示)。下面解释下[hHgGx]这几个参数:(以file做例子,file中的数据为:)Mansed中的解释为:h/H:copy/appendpatternspacetoholdspace(复制或者追加模式空间的数据至保留空间);g/G:copy/appendholdspacetopatternspace(复制或者追加保留空间的数据至模式空间);x:exchangetheconte
4、ntsofpatternspaceandholdspace(交换模式空间和保留空间的数据);一般会将h/H和g/G以及x联合起来用,可以达到栈和队列的使用目的。G:sed'G'file因为holdspace的初始为一个空行,并且始终没有修改其中的数据,一直保持的是空行,所以在每次执行G命令时,会将空行追加到每行数据之后。x:sed'x;G'file因为开始x命令将holdspace的空行和patternspace中的111111111交换,然后G命令又将111111111追加到patternapace的空行之
5、后,然后输出了,此时holdspace中依旧为111111111,接着patternspace中进入22222222,x命令将holdspace的111111111和patternspace中的22222222交换,然后G命令又将22222222追加到patternapace的111111111之后,然后输出了,依次类推,就输出了结果。可是看到过程如表格所示:命令sed'x;G'fileholdspacepatternspace执行命令过程执行前执行后执行前执行后输出执行x命令空行11111111111111
6、1111空行无输出执行G命令111111111111111111空行空行111111111执行x命令1111111112222222222222222111111111无输出执行G命令222222222222222211111111111111111122222222执行x命令222222223333333333333322222222无输出执行G命令3333333333333322222222222222223333333执行x命令………………………………大家应该能思考到为什么最后只有一个9h:sed'h;
7、G'file命令进行操作的思路,大家可以参照x命令的方法进行一步步的演示。H:sed'H;x'fileg:sed'1h;g;x'file下面解释下'1h;g;x'中“1“的含义,表示只有第一行执行h命令,将111111111复制到holdspace中去,之后每次执行g命令的时候,都是从holdspace中将111111111复制出来,覆盖掉了patternspace中的数据,所以结果显示为打印了9行111111111。而$表示只有最后一行执行这个命令。在1或$和命令中添加“!“,表示只有第一行或者最后一行不执
8、行这个命令。有关于更改多的命令n/N、d/D等,请大家自己查阅mansed或者其他资料。在遇到复杂的命令的时候,希望大家可以手动进行画图来执行每个命令,这样就比较清楚了。下面有4个例子来解释下选项n的作用:1.sed''file,这句命令会将output中的数据进行输出:1.sed-n'p'file,这句命令虽然显示的结果和上一个一样,但机制是不同的,这句命令是要求输出patternspace中的数
此文档下载收益归作者所有