Prayer

在一般中寻求卓越
posts - 1256, comments - 190, trackbacks - 0, articles - 0
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理
正文:

pattern space 顾名思义,模式空间,你要处理文本,首先要找到文本,怎么寻找文本?用正则表达式寻找文本,比如 /abc/,表示匹配abc的行,找到的文本行,比如匹配"abc"的行(注意,是整行,而不仅仅只是字符串abc),就会被放到pattern space中去,这就是pattern space的作用。

或许有人会问,对于pattern space,我不需要啊,我匹配到/abc/,我直接输出就行了。
但是实际文本处理中,需求往往是这样的,比如把匹配到/abc/的行,删除这些行的末尾三个字符,在打印出来。

所以,pattern space 本质就是,把匹配到的行暂存起来,然后进行一些处理,然后再输出。正是因为需要进行一些处理,所以它是
有存在的必要。


hold space,顾名思义,保存空间,因为要进行复杂的文本处理,比如我想把匹配/dashi/的行,和匹配/meinv/的行,求这两种行的交集,差集,并集等等,那么,仅仅有pattern space显然是不够用的,我要把匹配到/dashi/的行暂存起来,放到hold space中去,然后把匹配到美女的行,自动会放到 pattern space中去,这下,我可以对这两个buffer中的内容进行处理了。想求他们的交集就求交集,想求他们的并集就求他们的并集。随心所欲。如果仅有一个buffer,显然,后匹配的/meinv/内容会放到pattern space 中去,前面匹配到的/dashi/内容早就被清除了,只有美女,没有大师的世界,是何等寂寞。所以, hold space 就是个临时变量,用于需要处理多个匹配元素的场景。

其实这个问题涉及到sed的工作方式。sed编辑器逐行处理文件或输入,它每处理完一行就将其从模式空间(pattern space)中删除,然后将下一行读入空间,进行处理和显示。处理完输入文件的最后一行,sed便结束运行。如果要同时处理两行,那么只能把先读进的那行找个地方暂存起来,这个地方就是hold space

Feedback

# re: 大师系列之一:三言两语说pattern space和hold space  回复  更多评论   

2010-02-04 23:22 by yzhkpli
是您原创么?赞一个!~

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理