文字處理三劍客之sed

2021-08-21 20:34:45 字數 4765 閱讀 8846

sed 全名為 stream editor,流編輯器,用程式的方式來編輯文字。sed 與vim等編輯器不同,sed 是一種非互動式編輯器(即使用者不必參與編輯過程),它使用預先設定好的編輯指令對輸入的文字進行編輯,完成之後再輸出編輯結構。

sed會一次處理一行內容。處理時,把當前處理的行儲存在臨時緩衝區中,成為"模式空間",接著用sed命令處理緩衝區中的內容,處理完成後,把緩衝區的內容送往螢幕。接著處理下一行,這樣不斷重複,直到檔案末尾。檔案內容並沒有改變,除非你使用重定向儲存輸出。

sed [option] ...'script' inputfile...                  (script是個動作,當單引號為空時,預設輸出)

-n:不輸出模式空間內容到螢幕,即不自動列印

-e:多點編輯

-f: 從指定檔案中讀取編輯指令碼

-i.bak:備份檔案並原處編輯

[root@centos7 ~]# cat 3.ttx 

root dcuduuhroot

rootbvnsn23rswt

rqqtjkkkkroot

r12tbcjnnjr13t

r11tmkcmkmkcscsdcvcmkmllkr11t

[root@centos7 ~]# cat 3.ttx | sed -n ' '

[root@centos7 ~]# cat 3.ttx | sed -n '2p'

rootbvnsn23rswt

[root@centos7 ~]# cat 3.ttx | sed -e 's/root/test/g' -e 's/cmkm/kobe/g'

test dcuduuhtest

testbvnsn23rswt

rqqtjkkkktest

r12tbcjnnjr13t

r11tmkkobekcscsdcvkobellkr11t

[root@centos7 ~]#

[root@centos7 ~]# seq 10|sed -n '1~2p'13

579[root@centos7 ~]# seq 10|sed -n '2~2p'24

6810[root@centos7 ~]# seq 10|sed -n '1~2!p'24

6810

a\ 在當前行下面插入文字。

i\ 在當前行上面插入文字。

d 刪除,刪除模式空間匹配的行,並立即啟用下一輪迴圈。

s 替換指定字元

p 列印當前模式空間內容,追加到預設輸出之後。

w 儲存模式匹配的行至指定檔案

r 讀取指定檔案的文字至模式空間中匹配到的行後。

! 表示後面的命令對匹配行取反。

= 列印當前行號碼。

[root@centos7 ~]# seq 3|sed '1ahello'

1hello23

[root@centos7 ~]# seq 3|sed '1ihello'

hello12

3[root@centos7 ~]#

[root@centos7 ~]# seq 3|sed '2d'13

[root@centos7 ~]# seq 3|sed 's/2/nihao/'

1nihao

3[root@centos7 ~]# seq 3|sed '2r/etc/fstab'12

## /etc/fstab

# created by anaconda on tue jul 10 12:01:36 2018

#.......

[root@centos7 ~]#

g 表示行內全面替換。

p 顯示替換成功的行。

w 將替換成功的行儲存至檔案中。

\1 子串匹配標記

& 已匹配字串標記

[root@centos7 ~]# echo 1234567|sed  's/34/&ab/'   (匹配詞34之後)

1234ab567

[root@centos7 ~]# echo 1234567|sed 's/67/cd&/' (匹配詞67之前)

12345cd67

^ 匹配行開始,如:/^sed/匹配所有以sed開頭的行。

$ 匹配行結束,如:/sed$/匹配所有以sed結尾的行。

. 匹配乙個非換行符的任意字元,如:/s.d/匹配s後接乙個任意字元,最後是d。

* 匹配0個或多個字元,如:/*sed/匹配所有模板是乙個或多個空格後緊跟sed的行。

匹配乙個指定範圍內的字元,如/[ss]ed/匹配sed和sed。

[^] 匹配乙個不在指定範圍內的字元,如:/[^a-rt-z]ed/匹配不包含a-r和t-z的乙個字母開頭,緊跟ed的行。

\(..\) 匹配子串,儲存匹配的字元,如s/\(love\)able/\1rs,loveable被替換成lovers。

& 儲存搜尋字元用來替換其他字元,如s/love/**&**/,love這成**love**。

\< 匹配單詞的開始,如:/\ 匹配單詞的結束,如/love\>/匹配包含以love結尾的單詞的行。

x\ 重複字元x,m次,如:/0\/匹配包含5個0的行。

x\ 重複字元x,至少m次,如:/0\/匹配至少有5個0的行。

x\ 重複字元x,至少m次,不多於n次,如:/0\/匹配5~10個0的行。

[root@centos7 ~]# cat 3.ttx 

root dcuduuhroot

rootbvnsn23rswt

rqqtjkkkkroot

r12tbcjnnjr13t

r11tmkcmkmkcscsdcvcmkmllkr11t

[root@centos7 ~]# cat 3.ttx |sed -r 's/(r..t).*\1/hello/g'

hello

rootbvnsn23rswt

rqqtjkkkkroot

r12tbcjnnjr13t

hello

[root@centos7 ~]#

前面也有提到模式空間,即為處理檔案中一行內容的乙個臨時緩衝區。處理完一行之後就會把模式空間中的內容列印到標準輸出,然後自動清空快取。

而這裡說的保持空間是sed中的另外乙個緩衝區,此緩衝區正如其名,不會自動清空,但也不會主動把此緩衝區中的內容列印到標準輸出中。而是需要以下sed命令進行處理:

保持空間sed在正常情況下,將處理的行讀入模式空間,指令碼中的「sed command(sed命令)」就一條接著一條進行處理,直到指令碼執行完畢。然後該行被輸出,模式被清空;接著,在重複執行剛才的動作,檔案中的新的一行被讀入,直到檔案處理完畢。

模式空間可以比喻為乙個生產線,而保持空間則可以被比喻為倉庫。

h :把模式空間裡的內容複製到暫存緩衝區(保持空間)

h :把模式空間裡的內容追加到暫存緩衝區(保持空間)

g :把暫存緩衝區裡的內容複製到模式空間,覆蓋原有的內容

g:把暫存緩衝區的內容追加到模式空間裡,追加在原有內容的後面

n :讀取下乙個輸入行,用下乙個命令處理新的行而不是用第乙個命令

n :追加下乙個輸入行到模板塊後面並在二者間嵌入乙個新行,改變當前行號碼

具體用法如下:

seq 1 10 |sed 'n;d' 只顯示奇數行

[root@centos7 ~]# seq 10|sed 'n;d'13

579[root@centos7 ~]#

cat seq.txt |sed '/^$/d;g' 空行刪除,每行後加乙個空行,即保證每行後只有乙個空行

[root@centos7 ~]# seq 10|sed '/^$/d;g'12

3456

78910

seq 1 10 |sed 'g'  所有行變為空行

[root@centos7 ~]# seq 10|sed 'g'

[root@centos7 ~]#

seq 1 10 |sed '$!n;$!d' 輸出倒數後兩行

[root@centos7 ~]# seq 10|sed '$!n;$!d'910

[root@centos7 ~]#

seq 1 10 |sed 'n;d' 或 seq 1 10 |sed '$!d' 只輸出最後一行

[root@centos7 ~]# seq 10|sed 'n;d'

10[root@centos7 ~]# seq 10|sed '$!d'

10

seq 1 10 |sed '1!g;h;$!d' 或 seq 1 10 |sed -n '1!g;h;$p' 倒序輸出

[root@centos7 ~]# seq 10|sed '1!g;h;$!d'109

8765

4321

seq 1 8 |sed -n 'n;p'  輸出偶數行

[root@centos7 ~]# seq 10|sed -n 'n;p'24

6810[root@centos7 ~]#

文字處理三劍客之sed

sed 工作原理 sed 即 stream editor,和 vi 不同,sed是行編輯器 sed是從檔案或管道中讀取一行,處理一行,輸出一行 再讀取一行,再處理一行,再輸出一行,直到 最後一行。每當處理一行時,把當前處理的行儲存在臨時緩衝區中,稱為模式空間 pattern space 接著用sed...

文字處理三劍客之sed

sed是一種流編輯器,它一次處理一行內容。處理時,把當前處理的行儲存在臨時緩衝區中,稱為 模式空間 patternspace 接著用sed命令處理緩衝區中的內容,處理完成後,把緩衝區的內容送往螢幕。然後讀入下行,執行下乙個迴圈。如果沒有使諸如 d 的特殊命令,那會在兩個迴圈之間清空模式空間,但不會清...

文字處理三劍客 sed

sed 是乙個編輯器,是乙個強大的檔案處理工具。sed作用 用來替換 刪除,更新檔案中的內容。sed能自動處理乙個或多個檔案。sed原理 sed是一種流編輯器,它一次處理一行內容。處理時,把當前處理的行儲存在臨時緩衝區中,稱為 模式空間 pattern space 接著用sed命令處理緩衝區中的內容...