sed參數的用法

本章將以一節一個函數參數的方式 ,介紹所有 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

  多工作業系統

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章