本章將以一節一個函數參數的方式 ,介紹所有 sed 提供的函數參數 , 其中有
| s | d | a | i | c | p | l | r | w | y | ! | n | q | = | # | N | D | P | h | H | g | G | x | b | t |
另外 , 在各節中 , 首先簡單介紹函數參數功能 , 接着說明函數參數與位址參數配合的格式 , 而其中也一描述
sed 執行此函數參數的工作情形。
4.1 s
函數參數 s 表示替換(substitute)文件內字串。其指令格式如下 :
[address1[ ,address2]] s/pattern/replacemen/[flag]
對上述格式有下面幾點說明 :
函數參數 s 最多與兩個位址參數配合。
關於 "s/pattern/replacement/[flag]"(解[12]) 有下面幾點說明:
pattern : 它爲 reguler expression 字串。它表示文件中要被替換的字串。
replacement : 它爲一般字串。但其內出現下列字元有特別意義 :
& : 代表其前 pattern 字串。例如
sed -e 's/test/& my car/' 資料檔名
指令中 , & 代表 pattern 字串 "test"。故執行後 , 資料檔的 "test" 被替換成 "test my car"。
/n : 代表 pattern 中被第 n 個 /( 、/)(參照[附錄 A]) 所括起來的字串。例如
sed -e 's//(test/) /(my/) /(car/)/[/2 /3 /1]/' 資料檔名
指令中 , /1 表示 "test"、/2 表示 "my"、/1 表示 "car" 字串。故執行後 , 資料檔的 "test my car" 被替換
成 "[my car test]"。
/ : 可用它來還原一些特殊符號(如上述的 & 與 / )本身字面上的意義 , 或用它來代表換行。
flag : 主要用它來控制一些替換情況 :
當 flag 爲 g 時 , 代表替換所有符合(match)的字串 。
當 flag 爲十進位數字 m 時 , 代表替換行內第 m 個符合的字串。
當 flag 爲 p 時 , 代表替換第一個符合 pattern 的字串後 , 將資料輸出標準輸出檔。
當 flag 爲 w wfile 時 , 代表替換第一個符合 pattern 的字串後 , 輸出到 wfile 檔內(如果 wfile 不存在 , 則會
重新開啓名爲 wfile 的檔案)。
當沒有 flag 時 , 則將資料行內第一個符合 pattern 的字串以 replacement 字串來替換 。
delimiter : 在 "/pattern/replace/[flag] " 中 "/" 被當成一 delimiter。除了空白(blank)、換行(newline) 之外 ,
使用者可用任何字元作爲 delimiter。例如下述編輯指令
s#/usr#/usr1#g
上述命令中 /verb|#| 爲 delimiter。如果用 "/" 做 delimiter , 則 sed 會將 pattern 與 replacement 中的 "/"
當成 delimiter 而發生錯誤。
例:
題目 : 替換 input.dat 檔(後面如果沒有特別指定 , 均假設文件檔名爲 input.dat)內 "1996" 字串成 "1997" , 同時
將這些資料行存入 year97.dat 檔內。
說明 : 用函數參數 s 指示 sed 將 "1996" 字串替換成 "1997" , 另外用 s argument 中的 flag w 指示 sed 將替換
過的資料行存入 year97.dat 檔內。
sed 命令列:
sed -e 's/1996/1997/w year97.dat' input.dat
4.2 d
函數參數 d 表示刪除資料行 , 其指令格式如下:
[address1[ ,address2]] d
對上述格式有下面幾點說明:
函數參數 d 最多與兩個位址參數配合。
sed 執行刪除動作情況如下 :
將 pattern space 內符合位址參數的資料刪除。
將下一筆資料讀進 pattern space 。
重新執行 sed script。
例 : 可參考 section 3.3。
4.3 a
函數參數 a 表示將資料添加到文件中。其指令格式如下:
[address1] a/ 使用者所輸入的資料
對上述格式有下面幾點說明:
函數參數 a 最多與一個位址參數配合。
函數參數 a 緊接着 "" 字元用來表示此行結束 , 使用者所輸入的資料必須從下一行輸入。如果資料超過一行 , 則須在
每行的結尾加入""。
sed 執行添加動作情況如下 : 當 pattern space 內資料輸出後 , sed 跟着輸出使用者所輸入的資料。
例 :
題目: 添加 "多工作業系統" 在含 "UNIX" 字串的資料行後。假設 input.dat 檔的內容如下 :
UNIX
說明: 用函數參數 a 將所輸入的資料添加在含 "UNIX" 字串的資料行後。
sed 命令列如下 :
sed -e '/UNIX/a/
多工作業系統
' input.dat
執行上述命令後 , 其輸出結果如下 :
UNIX
多工作業系統
sed參數的用法
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.