sed命令總結

2021-08-19 18:41:17 字數 3852 閱讀 6136

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

命令語法:

sed [option]...  [input-file]...
常用引數說明:

sed的引數可以分為引數和動作2個類別,引數不用說,動作即表示對檔案進行哪些處理

引數:

-e                  一行命令語句,可以執行多條sed命令

-f 後面接sed指令碼的檔名

-h 顯示幫助文件

-n 取消預設的sed輸出

-v 顯示sed版本

動作說明:

a                   在當前行下面插入文字

d 刪除指定行,可以是多行如2,5表示刪除2-5行

-i 將處理結果insert到檔案中,會修改檔案內容,慎用

p 列印檔案內容,

s 替換,用於修改檔案內容,通常與g引數一起使用,g表示整行替換。

c 替換指定行

^               匹配行開始,如:/^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@server test]# cat test.txt 

111222

333444

555

1、在檔案的第5行後面新增一行資料

[root@server test]# sed -e 5a\666 test.txt 

111222

333444

555666

#螢幕輸出顯示資料已新增完畢,但實際上資料並沒有寫入檔案

[root@server test]# cat test.txt

111222

333444

555

2、在檔案的第5行後面新增一行資料,並寫入資料

[root@server test]# sed -i 5a\666 test.txt 

[root@server test]# cat test.txt

111222

333444

555666

當使用-i引數的時候可以看出,資料已經寫入檔案。如果只是用sed來分析資料,請不要使用-i引數。

3、刪除、新增指定行內容(a、d動作)

nl只是為了方便展示行號,sed可以直接對檔案進行各種操作,不需要管道符

1)指定指定某行-某行內容

[root@server test]# nl test.txt 

1111

2222

3333

4444

5555

6666

[root@server test]# nl test.txt |sed '2,5d'

1111

6666

這裡的d就是刪除操作,2,5表示要刪除的行號。

2)刪除某行-末行內容

[root@server test]# nl test.txt |sed '2,$d'

1111

3)在第2行後新增一行hello world

[root@server test]# nl test.txt |sed '2a hello world'

1111

2222

hello world

33334

4445

5556

666

4)在指定行後新增多行內容

[root@server test]# nl test.txt |sed '2a hello world\nhello boy'

1111

2222

hello world

hello boy

33334

4445

5556

666

4、檔案替換(s動作)

替換檔案中符合替換規則的內容

#只替符合規則的行內的第乙個資料

[root@server test]# sed 's/333/aaa/' test.txt

111222

aaa 444

333444

555666

111#全行符合規則的全部替換

[root@server test]# sed 's/333/aaa/g' test.txt

111222

aaa 444 aaa

444555

666111

[root@server test]#

5、sed多點編輯(e引數)

將檔案中的111替換為777,並在第6行後面新增999

[root@server test]# sed -e 's/111/777/g' -e '6a\999' test.txt 

777222

333444

555666

999777

6、替換指定行內容(c動作)

將第6行替換為222

[root@server test]# sed -e '6c\222' test.txt 

111222

333444

555222

111

備註:以上所有操作加上-i引數均會改變檔案內容,如果只是分析資料,慎用

特殊引數說明:

!               #對指定行以外的所有行執行命令

sed命令總結

1.刪除首字母問空的行 2.刪除第二到第八的所有行。3.編寫sed指令碼,替換與行匹配相同的內容,即將boby替換為 boby,但僅替換第二個boby為 boby.root localhost tmp cat test1.txt first web wqeqwe root localhost tmp...

sed命令使用總結

sed命令在處理文字內容的時候,作用非常強大,例如 刪除某行,替換,在某一行的後面增加一行等等功能。假設此時有個文件 test.txt 內容如下 a.a.a.a 10 b.b.b.b 40 c.c.c.c 100 現在我要刪除b.b這一行,命令如下 sed i b.b.b.b 40 d test.t...

Sed命令的使用總結

1 sed刪除行首的空格或tab字元。sed s t g file sed s g file 2 sed輸出字串 列印第三行 3表示等號,p表示列印 sed n 3p etc passwd 列印2至5行 sed n 2,5p etc passwd 從第2行開始,每隔3行列印一行 sed n 2 3p...