此外 , sed 編輯指令 , 除了可在命令列上執行 , 也可在檔案內執行。其中差別只是在命令列上執行時 , 其前必須加上選項 -e ; 而在檔案(註解[4])內時 , 則只需在其檔名前加上選項 -f。另外 , sed 執行編輯指令是依照它們在命令列上或檔內的次序。
   下面各節 , 將介紹執行命令列上的編輯指令 、sed 編輯指令、執行檔案內的編輯指令、執行多個檔案的編輯、及執行 sed 輸出控制。
sed -e '編輯指令1' -e '編輯指令2' ... 文件檔
   一般編輯指令不多時 , 使用者通常直接在命令上執行它們。例如 , 刪除 yel.dat 內 1 至 10 行資料 , 並將其餘文字中的 "yellow" 字串改成 "black" 字串。此時 , 可將編輯指令直接在命令上執行 , 其命令如下 :
sed -e '1,10d' -e 's/yellow/black/g' yel.dat
[address1[,address2]]function[argument]
下面兩小節 , 將仔細介紹位址參數的表示法與有哪些函數參數供選擇。
2.2.1 位址(address)參數的表示法
   實際上 , 位址參數表示法只是將要編輯的資料行 , 用它們的行數或其中的字串來代替表示它們。下面舉幾個例子說明(指令都以函數參數 d(參照[section4.2]) 為例) :
當資料行中有符合 regular expression 所表示的字串時 , 則執行函數參數指示的編輯動作。另外 , 在 regular expression 前後必須加上 "/"。例如指令為 /t.*t/d , 表示刪除所有含兩 "t" 字母的資料行。其中 , "." 表示任意字元; "*" 表示其前字元可重複任意次 , 它們結合 ".*" 表示兩 "t" 字母間的任意字串。
d
5d
1,/apple/d
/apple/,/orange/d
函數參數 | 功能 |
---|---|
: label | 建立 script file 內指令互相參考的位置。 |
# | 建立註解 |
{ } | 集合有相同位址參數的指令。 |
! | 不執行函數參數。 |
= | 印出資料行數( line number )。 |
a\ | 添加使用者輸入的資料。 |
b label | 將執行的指令跳至由 : 建立的參考位置。 |
c\ | 以使用者輸入的資料取代資料。 |
d | 刪除資料。 |
D | 刪除 pattern space 內第一個 newline 字母 \ 前的資料。 |
g | 拷貝資料從 hold space。 |
G | 添加資料從 hold space 至 pattern space 。 |
h | 拷貝資料從 pattern space 至 hold space 。 |
H | 添加資料從 pattern space 至 hold space 。 |
l | 印出 l 資料中的 nonprinting character 用 ASCII 碼。 |
i\ | 插入添加使用者輸入的資料行。 |
n | 讀入下一筆資料。 |
N | 添加下一筆資料到 pattern space。 |
p | 印出資料。 |
P | 印出 pattern space 內第一個 newline 字母 \ 前的資料。 |
q | 跳出 sed 編輯。 |
r | 讀入它檔內容。 |
s | 替換字串。 |
t label | 先執行一替換的編輯指令 , 如果替換成牛p>則將編輯指令跳至 : label 處執行。 |
w | 寫資料到它檔內。 |
x | 交換 hold space 與 pattern space 內容。 |
y | 轉換(transform)字元。 |
sed -f script_file 文件檔
sed -f ysb.scr yel.dat
1,10d s/yellow/black/g
   另外 , 在命令列上可混合使用選項 -e 與 -f , sed 執行指令順序依然是由命令列的左到右, 如執行至 -f 後檔案內的指令 , 則由上而下執行。
2.4 執行多個文件檔的編輯
   在 sed 命令列上 , 一次可執行編輯多個文件檔 , 它們跟在編輯指令之後。例如 , 替換 white.dat、red.dat、black.dat 檔內的 "yellow" 字串成 "blue" , 其命令如下:
sed -e 's/yellow/blue/g' white.dat red.dat black.dat
2.5.執行輸出的控制
   在命令列上的選項 -n (註解[7]) 表示輸出由編輯指令控制。由前章內容得知 , sed 會 "自動的" 將資料由 pattern space 輸送到標準輸出檔。但藉著選項 -n , 可將 sed 這 "自動的" 的動作改成 "被動的" 由它所執行的編輯指令(註解[8])來決定結果是否輸出。
   由上述可知 , 選項 -n 必須與編輯指令一起配合 , 否則無法獲得結果。例如 , 印出 white.dat 檔內含有 "white" 字串的資料行 , 其命令如下:
sed -n -e '/white/p' white.dat