Posted on 2010-01-22 16:51
Prayer 閱讀(340)
評(píng)論(1) 編輯 收藏 引用 所屬分類(lèi):
Shell
正文:
pattern space 顧名思義,模式空間,你要處理文本,首先要找到文本,怎么尋找文本?用正則表達(dá)式尋找文本,比如 /abc/,表示匹配abc的行,找到的文本行,比如匹配"abc"的行(注意,是整行,而不僅僅只是字符串a(chǎn)bc),就會(huì)被放到pattern space中去,這就是pattern space的作用。
或許有人會(huì)問(wèn),對(duì)于pattern space,我不需要啊,我匹配到/abc/,我直接輸出就行了。
但是實(shí)際文本處理中,需求往往是這樣的,比如把匹配到/abc/的行,刪除這些行的末尾三個(gè)字符,在打印出來(lái)。
所以,pattern space 本質(zhì)就是,把匹配到的行暫存起來(lái),然后進(jìn)行一些處理,然后再輸出。正是因?yàn)樾枰M(jìn)行一些處理,所以它是
有存在的必要。
hold space,顧名思義,保存空間,因?yàn)橐M(jìn)行復(fù)雜的文本處理,比如我想把匹配/dashi/的行,和匹配/meinv/的行,求這兩種行的交集,差集,并集等等,那么,僅僅有pattern space顯然是不夠用的,我要把匹配到/dashi/的行暫存起來(lái),放到hold space中去,然后把匹配到美女的行,自動(dòng)會(huì)放到 pattern space中去,這下,我可以對(duì)這兩個(gè)buffer中的內(nèi)容進(jìn)行處理了。想求他們的交集就求交集,想求他們的并集就求他們的并集。隨心所欲。如果僅有一個(gè)buffer,顯然,后匹配的/meinv/內(nèi)容會(huì)放到pattern space 中去,前面匹配到的/dashi/內(nèi)容早就被清除了,只有美女,沒(méi)有大師的世界,是何等寂寞。所以, hold space 就是個(gè)臨時(shí)變量,用于需要處理多個(gè)匹配元素的場(chǎng)景。
其實(shí)這個(gè)問(wèn)題涉及到sed的工作方式。sed編輯器逐行處理文件或輸入,它每處理完一行就將其從模式空間(pattern space)中刪除,然后將下一行讀入空間,進(jìn)行處理和顯示。處理完輸入文件的最后一行,sed便結(jié)束運(yùn)行。如果要同時(shí)處理兩行,那么只能把先讀進(jìn)的那行找個(gè)地方暫存起來(lái),這個(gè)地方就是hold space