1.IntrodUCtion
Sed(Stream EDitor)為 UNIX 系統上提供將編輯工作自動化的編輯器 , 使用者無需直接編輯資料。使用者可
利用 sed 所提供 20 多種不同的函數參數 , 組合(解 [1])它們完成不同的編輯動作。此外 , 由於 sed 都
以行為單位編輯文件 , 故其亦是行編輯器(line editor)。
一般 sed 最常用在編輯那些需要不斷重覆某些編輯動作的文件上 , 例如將文件中的某個字串替換成另一個字
串等等。這些相較於一般 UNIX 編輯器(交談式的, 如 vi、emacs)用手動的方式修改文件 , sed 用起來較省力。
下面幾節將分別介紹:
何時使用 sed
何處獲得 sed
sed 能做那些編輯動作
sed 如何工作
1.1 何時使用 sed
在修改文件時 , 如果不斷地重覆某些編輯動作 , 則可用 sed 自動一次執行這些編輯動作。例如要使 received
檔內 1000 封電子信件內的發信人屬名 "Tom" 改成 "John" , 此時只要在命令列上執行一簡單的 sed 命令就可
把檔內所有的 "Tom" 字串替換成 "John"。
再者 , 當文件需要許多不同編輯動作時 , 則 sed 一次可執行那些不同的編輯動作。例如 sed 能一次執行完將
文件中所有空白行刪除、替換字串、並將使用者輸入的文字添加在文件的第六行等等不同的編輯動作。
1.2 何處獲得 sed
一般的 UNIX 系統 , 本身即附有 sed。不同的 UNIX 系統所附的 sed 版本亦不盡相同。若讀者所使用的 UNIX
系統上未附有 sed , 則可透過 anonymous FTP 到下列地方去取得 :
phi.sinica.edu.tw:/pub/GNU/gnu
gete.sinica.edu.tw:/unix/gnu
ftp.edu.tw:/UNIX/gnu
ftp.csie.nctu.edu.tw:/pub/Unix/GNU
ftp.fcu.edu.tw: /pub3/UNIX/gnu
aXP350.ncu.edu.tw:/Packages/gnu
leica.ccu.edu.tw :/pub2/gnu
mail.ncku.edu.tw :/pub/unix/gnu
bbs.ccit.edu.tw :/pub1/UNIX/gnu
prep.ai.mit.edu.tw:/pub/gnu
1.3 sed 能做那些編輯動作
sed 可刪除(delete)、改變(change)、添加(append)、插入(insert)、合、交換文件中的資料行 , 或讀入其它
檔的資料到文件中 , 也可替換(substuite)它們其中的字串、或轉換(tranfer)其中的字母等等。例如將文件中的
連續空白行刪成一行、 "local" 字串替換成 "remote" 、"t" 字母轉換成 "T"、將第 10 行資料與第 11 資料合
等。
1.4 sed 如何工作
如同其它 UNIX 命令 , sed 由標准輸入讀入編輯文件並由標准輸出送出結果。下圖表示 sed 將資料行 "Unix" 替
換成 "UNIX" ,
在圖中 , 上方 standard input 為標准輸入 , 是讀取資料之處 ; standard output 為標准輸出 , 是送出結果之處 ;
中間 sed 方塊的下面兩個虛線方塊表示 sed 的工作流程。其中 , 左邊虛線方塊表示 sed 將標准輸入資料置入
pattern space , 右邊虛線方塊表示 sed 將 pattern space 中編輯完畢後的資料送到標准輸出。
在虛線方塊中 , 兩個實線方塊分別表示 pattern space 與 sed script。其中 , pattern space 為一緩區 , 它是
sed 工作場所 ; 而 sed script 則表示一組執行的編輯指令。
在圖中, 左邊虛線方塊 "Unix" 由標准輸入置入 pattern space ; 接著 , 在右邊虛線方塊中 , sed 執行 sed script
中的編輯指令 s/Unix/UNIX/ (解 [2]) , 結果 "Unix" 被替換成 "UNIX" , 之後 , "UNIX" 由 pattern space 送到
標准輸出。
總合上述所言 , 當 sed 由標准輸入讀入一行資料並放入 pattern space 時 , sed 依照 sed script 的編輯指令逐
一對 pattern space 內的資料執行編輯 , 之後 , 再由 pattern space 內的結果送到標准輸出 , 接著再將下一行資
料讀入。如此重執行上述動作 , 直至讀完所有資料行為止。
>