sed

sed工具

sed是一種功能強大的流編輯器,是針對文檔的行來操作的。它能對文檔查找、替換并且將替換結(jié)果顯示到屏幕。

  • 打印某行
    sed命令的格式為:sed -n 'n'p filename。-n選項的作用是只顯示指定要打印的行,其他內(nèi)容不顯示。單引號內(nèi)的n是一個數(shù)字,表示第幾行。p是打印的意思。示例命令如下:
[root@minglinux ~]# cat test.txt
aaaaaaaaaabbbb
root
12345678
@#%%&^*(
[root@minglinux ~]# sed -n '2'p test.txt
root
[root@minglinux ~]# sed '2'p test.txt   \\去掉-n
aaaaaaaaaabbbb
root
root
12345678
@#%%&^*(
[root@minglinux ~]# sed -n '1,3'p test.txt  \\打印指定區(qū)間的行
aaaaaaaaaabbbb
root
12345678
[root@minglinux ~]# sed -n '1,$'p test.txt   \\打印所有行
aaaaaaaaaabbbb
root
12345678
@#%%&^*(

上例我們可以看到,sed '2'p test.txt去掉-n選項時,屏幕顯示打印了第二行兩次,這是因為sed默認會打印文件中所有行。

  • 打印包含某個字符串的行
    這個用法類似grep,就不過多注解了,示例命令如下:
[root@minglinux ~]# cat test.txt
aaaaaaaaaabbbb
root
12345678
@#%%&^*(
[root@minglinux ~]# sed -n '/aa/'p test.txt
aaaaaaaaaabbbb
[root@minglinux ~]# sed -n '/^1/'p test.txt
12345678
[root@minglinux ~]# sed -n '/($/'p test.txt
@#%%&^*(
[root@minglinux ~]# sed -n '/r.o/'p test.txt
root
[root@minglinux ~]# sed -n '/oo*/'p test.txt
root

sed命令加上-e選項可以實現(xiàn)多個行為,如下所示:

[root@minglinux ~]# sed -e '3'p -e '/root/'p -e '/^a/'p -n test.txt
aaaaaaaaaabbbb
root
12345678
  • 刪除某些行
    sed中參數(shù)d表示刪除的動作,它不僅可以刪除指定的單行以及多行,而且可以刪除匹配某個字符的行,還可以刪除從某一行開始到文檔最后一行的所有行。不過,這僅僅是顯示效果而已,文檔內(nèi)容不會改變。示例命令如下:
[root@minglinux ~]# cat test.txt
aaaaaaaaaabbbb
root
12345678
@#%%&^*(
[root@minglinux ~]# sed '4'd  test.txt
aaaaaaaaaabbbb
root
12345678
[root@minglinux ~]# sed '1,3'd  test.txt
@#%%&^*(
[root@minglinux ~]# sed '/roo/'d  test.txt
aaaaaaaaaabbbb
12345678
@#%%&^*(
  • 替換字符或者字符串
    sed的參數(shù)s就表示替換的動作,參數(shù)g表示本行全局替換,如果不加g則只替換本行出現(xiàn)的第一個。示例命令如下:
[root@minglinux ~]# cat test.txt
aaaaaaaaaabbbb
root
12345678
@#%%&^*(
abcdef
[root@minglinux ~]# sed '1s/a/A/g' test.txt
AAAAAAAAAAbbbb
root
12345678
@#%%&^*(
abcdef
[root@minglinux ~]# sed '1s/a/A/' test.txt
Aaaaaaaaaabbbb
root
12345678
@#%%&^*(
abcdef
[root@minglinux ~]# sed 's/a/A/' test.txt
Aaaaaaaaaabbbb
root
12345678
@#%%&^*(
Abcdef
[root@minglinux ~]# sed 's/a/A/g' test.txt
AAAAAAAAAAbbbb
root
12345678
@#%%&^*(
Abcdef

除了可以使用/作為分隔符外,我們還可以使用其他特殊字符,例如#和@。

刪除文檔中所有的數(shù)字和字母的命令如下:

[root@minglinux ~]# cat test.txt
aaaaaaaaaabbbb
root
12345678
@#%%&^*(
abcdef
[root@minglinux ~]# sed 's/[0-9a-zA-Z]//g' test.txt



@#%%&^*(

  • 調(diào)換兩個字符串的位置
    示例命令如下:
[root@minglinux ~]# cat test.txt
aaaaaaaaaabbbb
root
12345678
@#%%&^*(
abcdef
[root@minglinux ~]# sed 's/\(r\)\(.*\)\(t\)/\3\2\1/' test.txt
aaaaaaaaaabbbb
toor
12345678
@#%%&^*(
abcdef

小括號在sed中屬于特殊符號,必須在前面加轉(zhuǎn)義字符\,替換時則寫成類似\1、\2或\3的形式。上例中用()把想要替換的字符打包成了一個整體。使用這么多的轉(zhuǎn)義符讓命令行看著很亂,我們使用sed加-r選項可以省去轉(zhuǎn)義符,所下所示:

[root@minglinux ~]# sed -r 's/(r)(.*)(t)/\3\2\1/' test.txt
aaaaaaaaaabbbb
toor
12345678
@#%%&^*(
abcdef
  • 在某一行前后增加指定內(nèi)容
[root@minglinux ~]# sed '1s/^.*$/&123/' test.txt
aaaaaaaaaabbbb123
root
12345678
@#%%&^*(
abcdef
[root@minglinux ~]# sed 's/^.*$/123&/' test.txt
123aaaaaaaaaabbbb
123root
12312345678
123@#%%&^*(
123abcdef
  • 直接修改文件的內(nèi)容
    sed -i :直接修改讀取的文件內(nèi)容,而不是輸出到終端。
    示例命令如下:
[root@minglinux ~]# cat test.txt
aaaaaaaaaabbbb
root
12345678
@#%%&^*(
abcdef
[root@minglinux ~]# sed -i 's/123/abc/g' test.txt
[root@minglinux ~]# cat test.txt
aaaaaaaaabbbb
root
abc45678
@#%%&^*(
abcdef
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容