1. 程式人生 > 實用技巧 >Linux shell 之 sed 概述

Linux shell 之 sed 概述

Linux shell 之 sed 概述

  sed是一種流編輯器,它是文字處理中非常好的工具,能夠完美的配合正則表示式使用,功能不同凡響。處理時,把當前處理的行儲存在臨時緩衝區中,稱為“模式空間”(pattern space),接著用 sed 命令處理緩衝區中的內容,處理完成後,把緩衝區的內容送往螢幕。接著處理下一行,這樣不斷重複,直到檔案末尾。檔案內容並沒有改變,除非你使用重定向儲存輸出。Sed主要用來自動編輯一個或多個檔案,可以將資料行進行替換、刪除、新增、選取等特定工作,簡化對檔案的反覆操作,編寫轉換程式等。

1 sed的命令格式:sed [options] 'command' file
(s); 2 3 sed的指令碼格式:sed [options] -f scriptfile file(s);

options選項

 1  -e :直接在命令列模式上進行sed動作編輯,此為預設選項;
 2 
 3  -f :將sed的動作寫在一個檔案內,用–f filename 執行filename內的sed動作;
 4 
 5  -i :直接修改檔案內容;
 6 
 7  -n :只打印模式匹配的行;
 8 
 9  -r :支援擴充套件表示式;
10 
11  -h或--help:顯示幫助;
12 
13  -V或--version:顯示版本資訊。

  有關 -e、-f、-n 的簡單理解請看

https://www.cnblogs.com/Reverse-xiaoyu/p/14097152.html

引數

檔案:指定待處理的文字檔案列表。

sed常用命令

 1  a\ 在當前行下面插入文字;
 2 
 3  i\ 在當前行上面插入文字;
 4 
 5  c\ 把選定的行改為新的文字;
 6 
 7  d 刪除,刪除選擇的行;
 8 
 9  D 刪除模板塊的第一行;
10 
11  s 替換指定字元;
12 
13  h 拷貝模板塊的內容到記憶體中的緩衝區;
14 
15  H 追加模板塊的內容到記憶體中的緩衝區;
16 
17  g 獲得記憶體緩衝區的內容,並替代當前模板塊中的文字;
18 
19
G 獲得記憶體緩衝區的內容,並追加到當前模板塊文字的後面; 20 21 l 列表不能列印字元的清單; 22 23 n 讀取下一個輸入行,用下一個命令處理新的行而不是用第一個命令; 24 25 N 追加下一個輸入行到模板塊後面並在二者間嵌入一個新行,改變當前行號碼; 26 27 p 列印模板塊的行。 P(大寫) 列印模板塊的第一行; 28 29 q 退出Sed; 30 31 b lable 分支到指令碼中帶有標記的地方,如果分支不存在則分支到指令碼的末尾; 32 33 r file 從file中讀行; 34 35 t label if分支,從最後一行開始,條件一旦滿足或者T,t命令,將導致分支到帶有標號的命令處,或者到指令碼的末尾; 36 37 T label 錯誤分支,從最後一行開始,一旦發生錯誤或者T,t命令,將導致分支到帶有標號的命令處,或者到指令碼的末尾; 38 39 w file 寫並追加模板塊到file末尾; 40 41 W file 寫並追加模板塊的第一行到file末尾; 42 43 ! 表示後面的命令對所有沒有被選定的行發生作用; 44 45 = 列印當前行號; 46 47 # 把註釋擴充套件到下一個換行符以前;

sed替換標記

 1  g 表示行內全面替換;
 2 
 3  p 表示列印行;
 4 
 5  w 表示把行寫入一個檔案;
 6 
 7  x 表示互換模板塊中的文字和緩衝區中的文字;
 8 
 9  y 表示把一個字元翻譯為另外的字元(但是不用於正則表示式);
10  
11  \1 子串匹配標記;
12 
13  & 已匹配字串標記;

sed元字符集

 1  ^ 匹配行開始,如:/^sed/匹配所有以sed開頭的行;
 2  
 3  $ 匹配行結束,如:/sed$/匹配所有以sed結尾的行;
 4  
 5  . 匹配一個非換行符的任意字元,如:/s.d/匹配s後接一個任意字元,最後是d;
 6  
 7  * 匹配0個或多個字元,如:/*sed/匹配所有模板是一個或多個空格後緊跟sed的行;
 8   
 9  [] 匹配一個指定範圍內的字元,如/[ss]ed/匹配sed和Sed;
10    
11  [^] 匹配一個不在指定範圍內的字元,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一個字母開頭,緊跟ed的行;
12   
13  \(..\) 匹配子串,儲存匹配的字元,如s/\(love\)able/\1rs,loveable被替換成lovers;
14   
15  & 儲存搜尋字元用來替換其他字元,如s/love/**&**/,love這成**love**;
16   
17  \< 匹配單詞的開始,如:/\ 
18  \> 匹配單詞的結束,如/love\>/匹配包含以love結尾的單詞的行;
19  
20  x\{m\} 重複字元x,m次,如:/0\{5\}/匹配包含5個0的行;
21  
22  x\{m,\} 重複字元x,至少m次,如:/0\{5,\}/匹配至少有5個0的行;
23  
24  x\{m,n\} 重複字元x,至少m次,不多於n次,如:/0\{5,10\}/匹配5~10個0的行;