Posted on 2010-01-22 16:51
Prayer 阅读(329)
评论(1) 编辑 收藏 引用 所属分类:
Shell
正文:
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