Sed使用手冊

來源:互聯網
上載者:User

   Sed 命令列可分成編輯指令與檔案檔部份。其中 , 編輯指令負責控制所有的編輯工作; 檔案檔表示所處理的檔案。 
   sed 的編輯指令均由位址(address)與函數(function)兩部份組成 , 其中, 在執行時 , sed 利用它的位址參數來決定編輯的對象;而用它的函數參數(解[3])編輯。此外,sed 編輯指令, 除了可在命令列上執行, 也可在檔案內執行。其中差別只是在命令列上執行時 , 其前必須加上選項 -e ; 而在檔案(解[4])內時 , 則只需在其檔名前加上選項 -f。另外 , sed 執行編輯指令是依照它們在命令列上或檔內的次序。  
 
  下面各節, 將介紹執行命令列上的編輯指令 、sed 編輯指令、執行檔案內的編輯指令、執行多個檔案的編輯、及執行 sed 輸出控制。  
 
2.1 執行命令列上的編輯指令  
2.2 sed 編輯指令  
2.3 執行檔案內的編輯指令  
2.4 執行多個檔案的編輯  
2.5 執行 sed 輸出控制  
2.1.執行命令列上的編輯指令  
  當編輯指令(參照[section 2.2])在命令列上執行時 , 其前必須加上選項 -e 。
其命令格式如下 :  
 
    sed -e '編輯指令1' -e '編輯指令2' ... 檔案檔   
 
其中 , 所有編輯指令都緊接在選項 -e 之後 , 共置於兩個 " ' " 特殊字元間。
另外 , 命令上編輯指令的執行是由 
左而右。 
 
  一般編輯指令不多時 , 使用者通常直接在命令上執行它們。例如 , 刪除 yel.
dat 內 1 至 10 行資料 , 並將其 
  餘文字中的 "yellow" 字串改成 "black" 字串。此時 , 可將編輯指令直接在命
令上執行 , 其命令如下 :  
 
    sed -e '1,10d' -e 's/yellow/black/g' yel.dat   
 
在命令中 , 編輯指令 '1,10d'(解[5])執行刪除 1 至 10 行資料 ; 編輯指令 
's/yellow/black/g'(解[6]) ,  
"yellow" 字串替換(substuite)成 "black" 字串。  
2.2 sed 的編輯指令  
  sed 編輯指令的格式如下 :  
             [address1[,address2]]function[argument] 
 
其中 , 位址參數 address1 、address2 為行數或 regular expression 字串 , 
表示所執行編輯的資料行 ; 函數參 
數 function[argument] 為 sed 的內定函數 , 表示執行的編輯動作。  
下面兩小節 , 將仔細介紹位址參數的標記法與有哪些函數參數供選擇。  
 
2.2.1 位址(address)參數的標記法 
  實際上 , 位址參數標記法只是將要編輯的資料行 , 用它們的行數或其中的字串
來代替表示它們。下面舉幾個例子 
  說明(指令都以函數參數 d(參照[section4.2]) 為例) :  
刪除檔內第 10 行資料 , 則指令為 10d。  
刪除含有 "man" 字串的資料行時 , 則指令為 /man/d。  
刪除檔內第 10 行到第 200 行資料, 則指令為 10,200d。  
 
刪除檔內第 10 行到含 "man" 字串的資料行 , 則指令為 10,/man/d。  
  接下來 , 以位址參數的內容與其個數兩點 , 完整說明指令中位址參數的標記法
(同樣也以函數參數 d 為例)。  
位址參數的內容:  
位址為十進位元字 : 此數字表示行數。當指令執行時 , 將對符合此行數的資料執
行函數參數指示的編輯動作。例如 ,  
刪除資料檔中的第 15 行資料 , 則指令為 15d(參照[section4.2])。其餘類推 ,
如刪除資料檔中的第 m 行資料 , 則 
指令為 md 。  
 
位址為 regular expression(參照[附錄 A]): 
當資料行中有符合 regular expression 所表示的字串時 , 則執行函數參數指示
的編輯動作。另外 , 在  
regular expression 前後必須加上 "/"。例如指令為 /t.*t/d , 表示刪除所有含
兩 "t" 字母的資料行。其中 , "."  
表示任意字元; "*" 表示其前字元可重任意次 , 它們結合 ".*" 表示兩 "t" 字母
間的任意字串。  
 
位址參數的個數 : 在指令中 , 當沒有位址參數時 , 表示全部資料行執行函數參
數所指示的編輯動作; 當只有一位址 
參數時 , 表示只有符合位址的資料行才編輯 ; 當有兩個位址參數 , 如 
address1,address2 時 , 表示對資料區執行 
編輯 , address1 代表起始資料行 , address2 代表結束資料行。對於上述內容 ,
 以下面例子做具說明。  
 
例如指令為  
 
d  
 
其表示刪除檔內所有資料行。  
例如指令為  
 
5d  
 
其表示刪除檔內第五行資料。  
例如指令為  
 
1,/apple/d 
 
其表示刪除資料區 , 由檔內第一行至內有 "apple" 字串的資料行。  
例如指令為  
 
/apple/,/orange/d  
 
其表示刪除資料區 , 由檔內含有 "apple" 字串至含有 "orange" 字串的資料行 
 
2.2.2 有那些函數(function)參數  
  下頁表中介紹所有 sed 的函數參數(參照[chapter 4])的功能。 
函數參數 功能  
∶ 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 只有上表所述幾個擁有基本編輯功能的函數 , 但由指令中位址參數和
指令與指令間的配合 , 也能使  
sed 完成大部份的編輯任務。  
2.3 執行檔案內的編輯指令  
  當執行的指令太多 , 在命令列上撰寫起來十分混亂 , 此時 , 可將這些指令整
理儲存在檔案 
  (譬如檔名為 script_file )內 , 用選項 -f script_file , 則讓 sed 執行 
script_file 內的編輯指令。其命 
  令的格示如下 :  
     sed -f script_file 檔案檔   
 
其中 , 執行 script_file 內編輯指令的順序是由上而下。例如上一節的例子 , 
其可改成如下命令:  
     sed -f ysb.scr yel.dat   
 
其中 , ysb.scr 檔的內容如下 :  
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  
 
上述命令執行時 , sed 依 white.dat、red.dat、black.dat 順序 , 執行編輯指
令 s/yellow/blue/(請參照[section 4.1] ,  
進行字串的替換。 
 
2.5.執行輸出的控制  
  在命令列上的選項 -n (解[7]) 表示輸出由編輯指令控制。由前章內容得知 , 
sed 會 "自動的" 將資料由 
   pattern space 輸送到標準輸出檔。但藉著選項 -n , 可將 sed 這 "自動的
" 的動作改成 "被動的" 由它所執行的 
   編輯指令(解[8])來決定結果是否輸出。  
  由上述可知 , 選項 -n 必須與編輯指令一起配合 , 否則無法獲得結果。例如 ,
 印出 white.dat 檔內含有 "white"  
  字串的資料行 , 其命令如下:  
 
      sed -n -e '/white/p' white.dat    
 
上面命令中 , 選項 -n 與編輯指令 /white/p (參照[section4.6]) 一起配合控制
輸出。其中 , 選項 -n 將輸出控制權 
移給編輯指令;/white/p 將資料行中含有 "white" 字串印出螢幕。   

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.