sed用法 基礎sed命令 sed命令的基本語法 sed OPTIONS… [SCRIPT] [INPUTFILE…] 常用的選項: -n,–quiet: 不輸出模式空間中的內容 -i: 直接編輯原文件,預設不對原文件進行操作 -e: 可以使用多個命令(腳本)進行操作 -f /path/from/s ...
sed用法
目錄
基礎sed命令
sed命令的基本語法
sed OPTIONS… [SCRIPT] [INPUTFILE…]
常用的選項:
-n,–quiet: 不輸出模式空間中的內容
-i: 直接編輯原文件,預設不對原文件進行操作
-e: 可以使用多個命令(腳本)進行操作
-f /path/from/sed_script: 從指定的文本中讀取處理腳本
-r: 使用擴展正則表達式
sed命令選項
替換標記
g:表示行內全面替換
w:表示把行寫入一個文件
x:表示互換模式空間的文本和保持空間的文本
y:表示把一個字元翻譯為另外的字元(不用於正則表達式)
單行模式空間
a :新增, a 的後面可以接字串,而這些字串會在新的一行出現(目前的下一行)
c :取代, c 的後面可以接字串,這些字串可以取代 n1,n2 之間的行!
d :刪除,因為是刪除,所以 d 後面通常不接任何東西;
i :插入, i 的後面可以接字串,而這些字串會在新的一行出現(目前的上一行);
p :列印,即將某個選擇的數據印出。通常 p 會與參數 sed -n 一起運行
s :取代,通常這個 s 的動作可以搭配正則表達式!例如 1,20s/old/new/g
n:讀取下一個輸入行, 用下一個命令處理新的行
y:把一個或多個字元替換成另一個字元
a的用法
[root@localhost ~]# vim xbz
[root@localhost ~]# cat xbz
a b c
d
c
b
a
[root@localhost ~]# sed '3abbxxxx' xbz //在第三行下麵(第四行)進行新增
a b c
d
c
bbxxxx
b
a
[root@localhost ~]# sed '/c/abbxxxx' xbz //在匹配的參數(c)下一行進行添加
a b c
bbxxxx
d
c
bbxxxx
b
a
c的用法
[root@localhost ~]# cat xbz
a b c
d
c
b
a
[root@localhost ~]# sed '2cxxb' xbz //取代第二行
a b c
xxb
c
b
a
[root@localhost ~]# cat xbz
a b c
d
c
b
a
[root@localhost ~]# sed '/d/caa' xbz //在匹配的參數(d)進行取代
a b c
aa
c
b
a
d的用法
root@localhost ~]# cat xbz
a b c
d
c
b
a
[root@localhost ~]# sed '1d' xbz //刪除第一行
d
c
b
a
[root@localhost ~]# cat xbz
a b c
d
c
b
a
[root@localhost ~]# sed '/c/d' xbz //在匹配的參數(c)進行整行刪除
d
b
a
i的用法
[root@localhost ~]# cat xbz
a b c
d
c
b
a
[root@localhost ~]# sed '2i3838' xbz //在第二行進行插入
a b c
3838
d
c
b
a
[root@localhost ~]# cat xbz
a b c
d
c
b
a
[root@localhost ~]# sed '/c/i6868' xbz //在匹配的參數(c)那一行進行插入
6868
a b c
d
6868
c
b
a
p的用法
[root@localhost ~]# cat xbz
a b c
d
c
b
a
[root@localhost ~]# sed -n '/b/p' xbz //-n選項:只顯示匹配處理的行(否則會輸出所有)(也就是關閉預設的輸出),只是列印帶b的行
a b c
b
s的用法
[root@localhost ~]# cat xbz
a b c
d
c
bbb
a
[root@localhost ~]# sed 's/b/a/' xbz //將匹配的參數(b)每行里的第一個參數進行替換
a a c
d
c
abb
a
[root@localhost ~]# cat xbz
a b c
d
c
bbb
a
[root@localhost ~]# sed 's/b/a/g' xbz //在上面的基礎是加上g就可以全部進行替換
a a c
d
c
aaa
a
n的用法
此處的n不是sed -n的n的那種用法,是n讀取下一個輸入行
[root@localhost ~]# cat xbz
a b c
d
c
bbb
a
[root@localhost ~]# sed -n '/a/n;p' xbz //匹配到的參數(a)下麵的所有行
d
c
bbb
y的用法
[root@localhost ~]# cat xbz
a b c
d
c
bbb
a
[root@localhost ~]# sed '3y/c/C/' xbz //將匹配到的第三行小寫c改為大寫C
a b c
d
C
bbb
a
高階sed命令
模式空間與保持空間
模擬空間:
當前處理輸出的緩衝空間,因為sed就是一次處理一行的內容,就會把這一行的內容提取到模式空間,然後用sed命令處理這一行的內容,處理完成後輸出到屏幕,接著處理下一行 的內容
保持空間:
保持空間就是sed的另一個緩衝區,此緩衝區如其名,不會自動清空內容,也不會把緩衝區的內容列印到的標準輸出中
模式空間與保持空間的關係
模式空間:相當於流水線,文本行再模式空間中進行處理;
保持空間:相當於倉庫,在模式空間對數據進行處理時,可以把數據臨時存儲到保持空間;作為模式空間的一個輔助臨時緩衝區,但又是相互獨立,可以進行交互,命令可以定址模式空間但是不能定址保持空間。可以使用高級命令h,H,g,G與模式空間進行交互。
sed命令選項
多行空間模式
N:讀取匹配到的行的下一行追加至模式空間
P:列印模式空間開端至\n內容,並追加到預設輸出之前
D:如果模式空間包含換行符,則刪除直到第一個換行符的模式空間中的文本, 並不會讀取新的輸入行,而使用合成的模式空間重新啟動迴圈。如果模式空間 不包含換行符,則會像發出d命令那樣啟動正常的新迴圈
N追加下一行
[root@localhost ~]# cat xbz.txt
Consult Section 3.1 in the Owner and Operator
Guide for a description of the tape drives
available on your system.
[root@localhost ~]# sed -n '/Operator$/{N;p}' xbz.txt
Consult Section 3.1 in the Owner and Operator
Guide for a description of the tape drives
[root@localhost ~]# sed -n '/Operator$/{N;s/Owner and Operator\nGuide/installation Guide/g;p}' xbz.txt
Consult Section 3.1 in the installation Guide for a description of the tape drives
[root@localhost ~]# sed '/Operator$/{N;s/Owner and Operator\nGuide/installation Guide/g}' xbz.txt
Consult Section 3.1 in the installation Guide for a description of the tape drives
available on your system.
//我們假設想要將“Owner and 0perator Guide”換成“lnstallation Guide”,但是我們發現它出現在文件中的兩行上,“Operator”和“Guide”被分開了。
Owner and Operator Guide 換成 installation Guide
空格用\n
D多行刪除
[root@localhost ~]# cat test
This is the header line.
This is a data line.
This is the last line.
[root@localhost ~]# sed '/^$/{N ; /header/D}' test //刪除模式空間的第一行
This is the header line.
This is a data line.
This is the last line.
P多行列印
[root@localhost ~]# cat xxb
Here are examples of the UNIX
System. Where UNIX
System appears, it should be the UNIX
Operating System.
[root@localhost ~]# sed -n '/UNIX$/p' xxb
Here are examples of the UNIX
System. Where UNIX
System appears, it should be the UNIX
[root@localhost ~]# sed -n '/UNIX$/{N;p}' xxb
Here are examples of the UNIX
System. Where UNIX
System appears, it should be the UNIX
Operating System.
[root@localhost ~]# sed -n '/UNIX$/{N;/\nSystem/{p}}' xxb
Here are examples of the UNIX
System. Where UNIX
[root@localhost ~]# sed -n '/UNIX$/{N;/\nSystem/{s// Operating &/g;p}}' xxb
Here are examples of the UNIX Operating
System. Where UNIX
[root@localhost ~]# sed -n '/UNIX$/{N;/\nSystem/{s// Operating &/g;P;D;p}}' xxb
Here are examples of the UNIX Operating
System. Where UNIX Operating
保持空間
命令 | 縮寫 | 功能 |
---|---|---|
Hold | h(複製)或H (追加) 上傳 | 將模式空間的內容複製或追加到保持空間 |
Get | g或G下載 | 將保持空間的內容複製或追加到模式空間 |
Exchange | x | 交換保持空間和模式空間的內容 |
[root@localhost ~]# cat abc
1
2
11
22
111
222
[root@localhost ~]# sed '/1/{h;d};/2/G' abc //匹配1將內容放入保持空間,刪除,在將匹配2的內容追加模式空間
2
1
22
11
222
111