目錄
sed用法
模式空間與保持空間
sed命令選項(xiàng)
sed命令的基本語(yǔ)法
sed命令選項(xiàng)
基礎(chǔ)sed命令
高階sed命令
基礎(chǔ)sed命令
sed命令的基本語(yǔ)法
sed OPTIONS… [SCRIPT] [INPUTFILE…]
常用的選項(xiàng):
-n,–quiet: 不輸出模式空間中的內(nèi)容
-i: 直接編輯原文件,默認(rèn)不對(duì)原文件進(jìn)行操作
-e: 可以使用多個(gè)命令(腳本)進(jìn)行操作
-f /path/from/sed_script: 從指定的文本中讀取處理腳本
-r: 使用擴(kuò)展正則表達(dá)式
sed命令選項(xiàng)
替換標(biāo)記
g:表示行內(nèi)全面替換
w:表示把行寫(xiě)入一個(gè)文件
x:表示互換模式空間的文本和保持空間的文本
y:表示把一個(gè)字符翻譯為另外的字符(不用于正則表達(dá)式)
單行模式空間
a :新增, a 的后面可以接字串,而這些字串會(huì)在新的一行出現(xiàn)(目前的下一行)
c :取代, c 的后面可以接字串,這些字串可以取代 n1,n2 之間的行!
d :刪除,因?yàn)槭莿h除,所以 d 后面通常不接任何東西;
i :插入, i 的后面可以接字串,而這些字串會(huì)在新的一行出現(xiàn)(目前的上一行);
p :打印,即將某個(gè)選擇的數(shù)據(jù)印出。通常 p 會(huì)與參數(shù) sed -n 一起運(yùn)行
s :取代,通常這個(gè) s 的動(dòng)作可以搭配正則表達(dá)式!例如 1,20s/old/new/g
n:讀取下一個(gè)輸入行, 用下一個(gè)命令處理新的行
y:把一個(gè)或多個(gè)字符替換成另一個(gè)字符
a的用法
[root@localhost ~]# vim xbz [root@localhost ~]# cat xbz a b c d c b a [root@localhost ~]# sed '3abbxxxx' xbz //在第三行下面(第四行)進(jìn)行新增 a b c d c bbxxxx b a [root@localhost ~]# sed '/c/abbxxxx' xbz //在匹配的參數(shù)(c)下一行進(jìn)行添加 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 //在匹配的參數(shù)(d)進(jìn)行取代 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 //在匹配的參數(shù)(c)進(jìn)行整行刪除 d b a
i的用法
[root@localhost ~]# cat xbz a b c d c b a [root@localhost ~]# sed '2i3838' xbz //在第二行進(jìn)行插入 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 //在匹配的參數(shù)(c)那一行進(jìn)行插入 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選項(xiàng):只顯示匹配處理的行(否則會(huì)輸出所有)(也就是關(guān)閉默認(rè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 //將匹配的參數(shù)(b)每行里的第一個(gè)參數(shù)進(jìn)行替換 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 //在上面的基礎(chǔ)是加上g就可以全部進(jìn)行替換 a a c d c aaa a
n的用法
此處的n不是sed -n的n的那種用法,是n讀取下一個(gè)輸入行
[root@localhost ~]# cat xbz a b c d c bbb a [root@localhost ~]# sed -n '/a/n;p' xbz //匹配到的參數(shù)(a)下面的所有行 d c bbb
y的用法
[root@localhost ~]# cat xbz a b c d c bbb a [root@localhost ~]# sed '3y/c/C/' xbz //將匹配到的第三行小寫(xiě)c改為大寫(xiě)C a b c d C bbb a
高階sed命令
模式空間與保持空間
模擬空間:
當(dāng)前處理輸出的緩沖空間,因?yàn)閟ed就是一次處理一行的內(nèi)容,就會(huì)把這一行的內(nèi)容提取到模式空間,然后用sed命令處理這一行的內(nèi)容,處理完成后輸出到屏幕,接著處理下一行 的內(nèi)容
保持空間:
保持空間就是sed的另一個(gè)緩沖區(qū),此緩沖區(qū)如其名,不會(huì)自動(dòng)清空內(nèi)容,也不會(huì)把緩沖區(qū)的內(nèi)容打印到的標(biāo)準(zhǔn)輸出中
模式空間與保持空間的關(guān)系
模式空間:相當(dāng)于流水線,文本行再模式空間中進(jìn)行處理;
保持空間:相當(dāng)于倉(cāng)庫(kù),在模式空間對(duì)數(shù)據(jù)進(jìn)行處理時(shí),可以把數(shù)據(jù)臨時(shí)存儲(chǔ)到保持空間;作為模式空間的一個(gè)輔助臨時(shí)緩沖區(qū),但又是相互獨(dú)立,可以進(jìn)行交互,命令可以尋址模式空間但是不能尋址保持空間??梢允褂酶呒?jí)命令h,H,g,G與模式空間進(jìn)行交互。
sed命令選項(xiàng)
多行空間模式
N:讀取匹配到的行的下一行追加至模式空間
P:打印模式空間開(kāi)端至 內(nèi)容,并追加到默認(rèn)輸出之前
D:如果模式空間包含換行符,則刪除直到第一個(gè)換行符的模式空間中的文本, 并不會(huì)讀取新的輸入行,而使用合成的模式空間重新啟動(dòng)循環(huán)。如果模式空間 不包含換行符,則會(huì)像發(fā)出d命令那樣啟動(dòng)正常的新循環(huán)
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 Guide/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 Guide/installation Guide/g}' xbz.txt Consult Section 3.1 in the installation Guide for a description of the tape drives available on your system. //我們假設(shè)想要將“Owner and 0perator Guide”換成“l(fā)nstallation Guide”,但是我們發(fā)現(xiàn)它出現(xiàn)在文件中的兩行上,“Operator”和“Guide”被分開(kāi)了。 Owner and Operator Guide 換成 installation Guide 空格用
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;/ System/{p}}' xxb Here are examples of the UNIX System. Where UNIX [root@localhost ~]# sed -n '/UNIX$/{N;/ System/{s// Operating &/g;p}}' xxb Here are examples of the UNIX Operating System. Where UNIX [root@localhost ~]# sed -n '/UNIX$/{N;/ System/{s// Operating &/g;P;D;p}}' xxb Here are examples of the UNIX Operating System. Where UNIX Operating
保持空間
命令 | 縮寫(xiě) | 功能 |
---|---|---|
Hold | h(復(fù)制)或H (追加) 上傳 | 將模式空間的內(nèi)容復(fù)制或追加到保持空間 |
Get | g或G下載 | 將保持空間的內(nèi)容復(fù)制或追加到模式空間 |
Exchange | x | 交換保持空間和模式空間的內(nèi)容 |
[root@localhost ~]# cat abc 1 2 11 22 111 222 [root@localhost ~]# sed '/1/{h;d};/2/G' abc //匹配1將內(nèi)容放入保持空間,刪除,在將匹配2的內(nèi)容追加模式空間 2 1 22 11 222 111
-
Linux
+關(guān)注
關(guān)注
87文章
11292瀏覽量
209322 -
SED
+關(guān)注
關(guān)注
0文章
25瀏覽量
27085 -
腳本
+關(guān)注
關(guān)注
1文章
389瀏覽量
14858
原文標(biāo)題:深入淺出Sed:掌握Linux文本處理的終極利器
文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論