本章將解釋sed究竟如何工作的。要成為一個專家級的sed用戶,需要知道它的內(nèi)部執(zhí)行和結(jié)構(gòu)。sed遵循一個簡單的工作流:讀取,執(zhí)行和顯示。下圖描繪了工作流程。
sed從輸入流(文件,管道,或標(biāo)準(zhǔn)輸入)讀取,并將其存儲在其內(nèi)部的緩沖模式稱為緩沖行。
所有sed命令順序地對模式緩沖區(qū)使用。默認(rèn)情況下,sed命令都適用于所有行(全局),除非指定行尋址。
sed發(fā)送(修改)的內(nèi)容到輸出數(shù)據(jù)流。在發(fā)送數(shù)據(jù)后,模式緩沖器是空的。這個過程一直重復(fù),直到文件被耗盡。
讓我們創(chuàng)建一個文本文件quote.txt包含引用著名作家Paulo Coelho。
[jerry]$ vi quote.txt There is only one thing that makes a dream impossible to achieve: the fear of failure. - Paulo Coelho, The Alchemist
為了了解sed的工作流程,讓我們使用sed顯示該文件的內(nèi)容quote.txt。這個例子模仿cat命令。
[jerry]$ sed '' quote.txt
當(dāng)執(zhí)行上面的代碼,就會產(chǎn)生下面的結(jié)果。
There is only one thing that makes a dream impossible to achieve: the fear of failure.
在上面的例子中,quote.txt輸入文件名和在此之前,有一對單引號的暗示sed 命令。讓我們解讀此操作。
第一sed從輸入文件quote.txt讀取并將其存儲在它的模式緩沖區(qū)行。然后它適用sed關(guān)于模型緩沖區(qū)命令。在我們的例子中沒有sed 命令在那里,因此是對模式緩沖區(qū)未進行任何操作。最后刪除,并打印在標(biāo)準(zhǔn)輸出模式緩沖區(qū)中的內(nèi)容。是不是很簡單?
在下面的例子中,sed 接受來自標(biāo)準(zhǔn)輸入流輸入。
[jerry]$ sed ''
當(dāng)執(zhí)行上面的代碼,它會提示我們輸入從標(biāo)準(zhǔn)輸入一些文字。因此,讓我們進入一個文本行,如下所示:
There is only one thing that makes a dream impossible to achieve: the fear of failure.
輸入該行后,當(dāng)我們按下輸入產(chǎn)生以下結(jié)果:
There is only one thing that makes a dream impossible to achieve: the fear of failure.
要從使用的sed會話退出,按下鍵盤上的 ctrl-D (^D).