sed工作流程
本章將解釋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).