linux sed流編輯器示例講解

2021-08-03 20:54:55 字數 3537 閱讀 9953

本文結構

sed編輯器被稱作流編輯器(stream editor),跟普通互動式文字編輯器正好相反,它是用來過濾和進行文字轉換的。

流編輯器會在編輯資料之前基於預先提供的一組規則來編輯資料流

sed原理:sed以文字的行為單位進行處理,一次處理一行內容。首先sed把當前處理的行儲存在臨時緩衝區中(稱為模式空間pattern space),接著處理緩衝區中的行,處理完成後,把緩衝區的內容送往螢幕。sed處理完一行就將其從臨時緩衝區刪除,然後將下一行讀入,進行處理和顯示,這樣不斷的重複,直到檔案末尾。處理完檔案的最後一行後,sed便結束執行。

因為sed是對檔案中每行在臨時緩衝區中的副本進行編輯,所以原檔案內容並沒有改變,除非重定向輸出。

sed [option]...  [input-file]...

#sed [選項]... [檔案]...

-e script, --expression=script

為將要執行的命令新增指令碼

-f script-file, --file=script-file

新增指令碼檔案的內容給將要執行的檔案

--follow-symlinks

但程式執行時追隨連線

-i[suffix], --in-place[=suffix]

在適當的位置編輯檔案(如果字尾提供的話做好備份)

-c, --copy

當在 -i模式下移動檔案的時候使用副本而不是重新命名

-l n, --line-length=n

為l命令明確指定換行的長度是多少

--posix

關閉所有gun擴充套件

-r, --regexp-extended

在指令碼中使用擴充套件後的正則表達

-s, --separate

將檔案時為分開的而不是乙個單一持續長資料流

-u, --unbuffered

從輸入檔案中家在最小數量的資料,頻繁重新整理輸出快取

-z, --null-data

用nul字元分割行

1.替換部分內容

[root@foundation36 ~]# echo halo the wooo | sed 's/woo/world ya/'

halo the world yao

[root@foundation36 ~]#

2.sed執行多條命令,引數 -e

hello the word

[root@foundation36 ~]# sed -e 's/halo/hello/; s/word/world ya/' time.txt

hello the world ya

3.多條命令寫入指令碼呼叫檔案執行,假設檔名稱為sedcom

sed -f sedcom file

-n選項和p命令一起使用表示只列印那些發生替換的行:

sed -n 's/test/test/p' file

sed -i 's/book/books/g' file

4.全域性替換

使用字尾 /g 標記會替換每一行中的所有匹配:

sed 『s/book/books/g』 file

echo sksksksksksk | sed 's/sk/sk/2g' 

sksksksksksk

echo sksksksksksk | sed 's/sk/sk/3g'

sksksksksksk

echo sksksksksksk | sed 's/sk/sk/4g'

sksksksksksk

5定界符

以上命令中字元 / 在sed中作為定界符使用,也可以使用任意的定界符:

sed 's:test:text:g' sed 's|test|text|g'
定界符出現在樣式內部時,需要進行轉義:

sed 's/\/bin/\/usr\/local\/bin/g'
6.刪除操作:d命令

刪除空白行:

sed '/^$/d' file

刪除檔案的第2行: sed '2d' file

刪除檔案的第2行到末尾所有行: sed '2,$d' file

刪除檔案最後一行: sed '$d' file

刪除檔案中所有開頭是test的行: sed '/^test/'d file

7.組合多個表示式

sed 『表示式』 | sed 『表示式』 等價於:

sed 『表示式; 表示式』

8.選定行的範圍:,(逗號)

所有在模板test和check所確定的範圍內的行都被列印:

sed -n '/test/,/check/p' file

列印從第5行開始到第乙個包含以test開始的行之間的所有行

sed -n '5,/^test/p' file

對於模板test和west之間的行,每行的末尾用字串aaa bbb替換:

sed '/test/,/west/s/$/aaa bbb/' file

-e選項允許在同一行裡執行多條命令:

sed -e '1,5d' -e 's/test/check/' file

上面sed表示式的第一條命令刪除1至5行,第二條命令用check替換test。命令的執行順序對結果有影響。如果兩個命令都是替換命令,那麼第乙個替換命令將影響第二個替換命令的結果。

和 -e 等價的命令是 --expression:

sed --expression='s/test/check/' --expression='/love/d' file

10.變形

y命令

把1~10行內所有abcde轉變為大寫,注意,正規表示式元字元不能使用這個命令:

sed '1,10y/abcde/abcde/' file
11.列印奇數行或偶數行

方法1

sed -n 'p;n' test.txt #奇數行

sed -n 'n;p' test.txt #偶數行

方法2:

sed -n '1~2p' test.txt #奇數行

sed -n '2~2p' test.txt #偶數行

12.列印匹配字串的下一行

grep -a 1 scc urfile

sed -n '/scc/' urfile

awk '/scc/' urfile

linux sed 流編輯器

流編輯器,是一種非互動式的編輯器,常用於指令碼書寫。sed編輯器可以根據輸入的命令列的命令或儲存在檔案中的命令處理資料。它,每次從輸入讀取一行資料,將該資料所提供的編輯器命令匹配,根據命令修改資料流中的資料,然後將新資料輸出到stdout。在流編輯器將全部命令和一行資料匹配完之後,它讀取下一行資料,...

linux Sed編輯器簡介

1.sed簡介 3.sed命令 呼叫sed命令有兩種形式 sed options command file s sed options f scriptfile file s a 在當前行後面加入一行文字。b lable 分支到指令碼中帶有標記的地方,如果分支不存在則分支到指令碼的末尾。c 用新的文...

Linux sed行編輯器

基本工作模式 sed 命令預設列印匹配到的內容到螢幕 按照給定的指令碼命令,按行讀取文字中的內容,讀取到pattern space空間中進行編輯操作,未完成的編輯操作放到hold space 空間中,pattern space 再處理其他行,再次處理編輯時,就會從hold space 讀取到patt...