Linux學習之sed命令詳解

2022-09-15 04:30:16 字數 3188 閱讀 1566

sed是stream editor的簡稱,也就是流編輯器。它一次處理一行內容,處理時,把當前處理的行儲存在臨時緩衝區中,稱為「模式空間」(pattern space),接著用sed命令處理緩衝區中的內容,處理完成後,把緩衝區的內容送往螢幕。接著處理下一行,這樣不斷重複,直到檔案末尾。檔案內容並沒有 改變,除非你使用重定向儲存輸出。

sed命令的使用規則是這樣的:

1

sed [option] 'command' input_file

其中option是可選的,常用的option有如下幾種:

假設有乙個本地檔案test.txt,檔案內容如下:

[qifuguang@winwill~]$ cat test.txt

this is first line

this is second line

this is third line

this is fourth line

this fifth line

end

本節將使用該檔案詳細演示每乙個命令的用法。

123

4567

89

本例命令部分中的1表示第一行,同樣的第二行寫成2,第一行到第三行寫成1,3,用$表示最後一行,比如2,$表示第二行到最後一行中間所有的行(包含第二行和最後一行)。本例的作用是在第一行之後增加字串」add one」,從輸出可以看到具體效果。

123

4567

891011

1213

1415

本例表示在第一行和最後一行所有的行後面都加上」add one」字串,從輸出可以看到效果。

123

4567

89

本例表示在包含」first」字串的行的後面加上字串」add one」,從輸出可以看到第一行包含first,所以第一行之後增加了」add one」

123

4567

89

i命令使用方法和a命令一樣的,只不過是在匹配的行的前面插入字串,所以直接將上面a命令的示例的a替換成i即可,在此就不囉嗦了。

123

4567

8

本例表示將最後一行替換成字串」add one」,從輸出可以看到效果。

123

45

[qifuguang@winwill~]$ sed '4,$c \add one' test.txt

this is first line

this is second line

this is third line

add one

本例將第四行到最後一行的內容替換成字串」add one」。

123

4567

8

[qifuguang@winwill~]$ sed '/^ha.*day$/c \replace line' test.txt

this is first line

this is second line

this is third line

this is fourth line

this is fifth line

replace line

end

本例將以ha開頭,以day結尾的行替換成」replace line」。

123

4567

[qifuguang@winwill~]$ sed '/^ha.*day$/d' test.txt

this is first line

this is second line

this is third line

this is fourth line

this is fifth line

end

本例刪除以ha開頭,以day結尾的行。

123

4

[qifuguang@winwill~]$ sed '4,$d' test.txt

this is first line

this is second line

this is third line

本例刪除第四行到最後一行中的內容。

123

45

本例在螢幕上列印第四行到最後一行的內容,p命令一般和-n選項一起使用。

1

2

本例列印以ha開始,以day結尾的行。

實際運用中s命令式最常使用到的。

123

4567

8

本例將檔案中的所有line替換成text,最後的g是global的意思,也就是全域性替換,如果不加g,則只會替換本行的第乙個line。

123

4567

8

123

4567

8

這個例子有點複雜,先分解一下。首先s命令的模式是s/old/new/g這樣的,所以本例的old部分即\(.*\)line$,sed命令中使用\(\)包裹的內容表示正規表示式的第n部分,序號從1開始計算,本例中只有乙個\(\)所以\(.*\)表示正規表示式的第一部分,這部分匹配任意字串,所以\(.*\)line$匹配的就是以line結尾的任何行。然後將匹配到的行替換成正規表示式的第一部分(本例中相當於刪除line部分),使用\1表示匹配到的第一部分,同樣\2表示第二部分,\3表示第三部分,可以依次這樣引用。比如下面的例子:

123

4567

8

正規表示式中is兩邊的部分可以用\1\2表示,該例子的作用其實就是刪除中間部分的is。

Linux之Sed命令詳解

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

linux之sed命令詳解

sed是stream editor的簡稱,也就是流編輯器。它一次處理一行內容,處理時,把當前處理的行儲存在臨時緩衝區中,稱為 模式空間 pattern space 接著用sed命令處理緩衝區中的內容,處理完成後,把緩衝區的內容送往螢幕。接著處理下一行,這樣不斷重複,直到檔案末尾。檔案內容並沒有 改變...

linux之sed命令詳解

sed是乙個非互動式文字編輯器,它可以對文字檔案和標準輸入進行編輯,標準輸入可以來自鍵盤輸入,檔案重定向,字串,變數,或者是管道的文字。並將其複製到緩衝區,然後讀取命令列的命令,對此命令要求的行號進行編輯。用法 sed共有三種用法 直接在命令列中使用 sed 選項 sed命令 輸入檔案 將sed命令...