Linux shell 之 sed 概述
阿新 • • 發佈:2020-12-08
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的行;