流編輯器 - 工作流程



在本章中,我們將探討 SED 的確切工作原理。要成為一名專家級的 SED 使用者,需要了解其內部機制。SED 遵循一個簡單的工作流程:讀取、執行和顯示。下圖描述了該工作流程。

Stream Editor Workflow
  • 讀取:SED 從輸入流(檔案、管道或標準輸入)讀取一行,並將其儲存在其稱為模式緩衝區的內部緩衝區中。

  • 執行:所有 SED 命令都按順序應用於模式緩衝區。預設情況下,SED 命令應用於所有行(全域性),除非指定了行定址。

  • 顯示:將(修改後的)內容傳送到輸出流。傳送資料後,模式緩衝區將為空。

  • 上述過程重複,直到檔案耗盡。

注意事項

  • 模式緩衝區是 SED 使用的一個私有的、記憶體中的、易失性儲存區域。

  • 預設情況下,所有 SED 命令都應用於模式緩衝區,因此輸入檔案保持不變。GNU SED 提供了一種就地修改輸入檔案的方法。我們將在後面的章節中探討它。

  • 還有一個名為保持緩衝區的記憶體區域,它也是一個私有的、記憶體中的、易失性儲存區域。資料可以儲存在保持緩衝區中,以便以後檢索。在每個迴圈結束時,SED 會刪除模式緩衝區的內容,但保持緩衝區的內容在 SED 迴圈之間保持持久。但是,SED 命令不能直接在保持緩衝區上執行,因此 SED 允許在保持緩衝區和模式緩衝區之間移動資料。

  • 最初,模式緩衝區和保持緩衝區都為空。

  • 如果沒有提供輸入檔案,則 SED 從標準輸入流 (stdin) 接收輸入。

  • 如果沒有提供地址範圍,則預設情況下 SED 對每一行進行操作。

示例

讓我們建立一個文字檔案quote.txt,其中包含著名作家保羅·科埃略的一段引言。

[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 生成的輸出。要退出 SED 會話,請按 ctrl-D (^D)。

廣告