本章將解釋sed究竟如何工作的。要成為一個專家級的sed使用者,需要知道它的內部執行和結構。sed遵循一個簡單的工作流:讀取,執行和顯示。下圖描繪了工作流程。
sed從輸入流(檔案,管道,或標準輸入)讀取,並將其儲存在其內部的緩衝模式稱為緩衝行。
所有sed命令順序地對模式緩衝區使用。預設情況下,sed命令都適用於所有行(全域性),除非指定行定址。
sed傳送(修改)的內容到輸出資料流。在傳送資料後,模式緩衝器是空的。這個過程一直重複,直到檔案被耗盡。
讓我們建立一個文字檔案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顯示該檔案的內容quote.txt。這個例子模仿cat命令。
[jerry]$ sed '' quote.txt
當執行上面的程式碼,就會產生下面的結果。
There is only one thing that makes a dream impossible to achieve: the fear of failure.
在上面的例子中,quote.txt輸入檔案名和在此之前,有一對單引號的暗示sed 命令。讓我們解讀此操作。
第一sed從輸入檔案quote.txt讀取並將其儲存在它的模式緩衝區行。然後它適用sed關於模型緩衝區命令。在我們的例子中沒有sed 命令在那裡,因此是對模式緩衝區未進行任何操作。最後刪除,並列印在標準輸出模式緩衝區中的內容。是不是很簡單?
在下面的例子中,sed 接受來自標準輸入流輸入。
[jerry]$ sed ''
當執行上面的程式碼,它會提示我們輸入從標準輸入一些文字。因此,讓我們進入一個文字行,如下所示:
There is only one thing that makes a dream impossible to achieve: the fear of failure.
輸入該行後,當我們按下輸入產生以下結果:
There is only one thing that makes a dream impossible to achieve: the fear of failure.
要從使用的sed對談退出,按下鍵盤上的 ctrl-D (^D).