目錄
sed用法
模式空間與保持空間
sed命令選項
sed命令的基本語法
sed命令選項
基礎sed命令
高階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:打印模式空間開端至 內容,并追加到默認輸出之前
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 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. //我們假設想要將“Owner and 0perator Guide”換成“lnstallation Guide”,但是我們發現它出現在文件中的兩行上,“Operator”和“Guide”被分開了。 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
保持空間
命令 | 縮寫 | 功能 |
---|---|---|
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
-
Linux
+關注
關注
87文章
11292瀏覽量
209328 -
SED
+關注
關注
0文章
25瀏覽量
27085 -
腳本
+關注
關注
1文章
389瀏覽量
14858
原文標題:深入淺出Sed:掌握Linux文本處理的終極利器
文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論