Sed編輯器
sed是一種線上編輯器,它一次處理一行內容。處理時,把當前處理的行存儲在臨時緩衝區中,稱為“模式空間”(pattern space),接著用sed命令處理緩衝區中的內容,處理完成後,把緩衝區的內容送往螢幕。接著處理下一行,這樣不斷重複,直到檔案末尾。檔案內容並沒有改變,除非你使用重定向存儲輸出。Sed主要用來自動編輯一個或多個檔案;簡化對檔案的反覆操作;編寫轉換程式等。以下介紹的是Gnu版本的Sed 3.02。
sed是stream editor的縮寫。是一個非互動式上下文(context)編輯器,它被設計在下列三種情況下發揮作用:
1) 編輯那些對舒適的互動式編輯而言太大的檔案。
2) 在編輯命令太複雜而難於在互動模式下鍵入的時候編輯任何大小的檔案。
3) 要在對輸入的一趟掃描中有效的進行多個‘全局’(global)編輯函式。
因為每次只把輸入的某些行駐留在記憶體中,並且不使用臨時檔案,所以可編輯的檔案的有效大小,只受限於輸入和輸出要同時共存於次級存儲的要求。
可以單獨的建立複雜的編輯腳本並作為給 sed 的命令檔案。對於複雜的編輯,這節省了可觀的鍵入和隨之而來的錯誤。從命令檔案運行 sed 高效於作者所知道的任何互動式編輯器,甚至包括能用預先寫好的腳本驅動的編輯器。
相較於互動式編輯器而言,根本性的損失是缺乏相對地址(由於操作是每次一行的),和缺乏對命令如期運行的立即驗證。
sed 是 UNⅨ編輯器ed 的直系後代。由於在互動式和非互動式操作之間的差異,在 ed 和 sed 之間已經有了可觀的變化;甚至 ed 的慣常用戶都會經常感到驚訝(並可能氣憤),如果他們沒有閱讀本文檔的章節 2 和 3,就草率的使用 sed 的話。在兩個編輯器之間最顯著的家族性共同之處,在於他們所識別的模式(‘正則表達式’)的種類;匹配模式的代碼可以從 ed 的代碼幾乎原封不動的複製過來,在章節 2 中對正則表達式的描述就是從 UNⅨ Programmer’s Manual[1] 幾乎原封不動的複製過來的。(代碼和描述都是Dennis M. Ritchie寫的)。
定址
可以通過定址來定位你所希望編輯的行,該地址用數字構成,用逗號分隔的兩個行數表示以這兩行為起止的行的範圍(包括行數表示的那兩行)。如1,3表示1,2,3行,美元符號($)表示最後一行。範圍可以通過數據,正則表達式或者二者結合的方式確定 。