
- Sed 教程
- Sed - 首頁
- Sed - 概述
- Sed - 環境
- Sed - 工作流程
- Sed - 基本語法
- Sed - 迴圈
- Sed - 分支
- Sed - 模式緩衝區
- Sed - 模式範圍
- Sed - 基本命令
- Sed - 特殊字元
- Sed - 字串
- Sed - 模式管理
- Sed - 正則表示式
- Sed - 有用技巧
- Sed 有用資源
- Sed - 快速指南
- Sed - 有用資源
- Sed - 討論
流編輯器 - 工作流程
在本章中,我們將探討 SED 的確切工作原理。要成為一名專家級的 SED 使用者,需要了解其內部機制。SED 遵循一個簡單的工作流程:讀取、執行和顯示。下圖描述了該工作流程。

讀取: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)。