在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Linux/ Sed管理模式
Sed字符串
Sed實用功能
Sed管理模式
sed環(huán)境設(shè)置
sed模式緩沖區(qū)
Sed循環(huán)
Sed模式范圍
Sed教程
Sed正則表達(dá)式
Sed分支
Sed基本語法
sed工作流程
Sed特殊字符
Sed基本命令

Sed管理模式

我們已經(jīng)討論了使用模式和保持緩沖區(qū)。現(xiàn)在我們就來探討更多關(guān)于它們使用的例子。

n 命令

n命令打印出模式緩沖區(qū)的內(nèi)容,清除模式緩沖器,讀取下一行到模式緩沖區(qū),并在其上施加命令。下面給出的是 n命令的語法。

[address1[,address2]]n

下面是一個使用它打印指定的文件的內(nèi)容n命令一個簡單的例子:

[jerry]$ sed 'n' books.txt 

當(dāng)執(zhí)行上面的代碼,它會列出下來的文件 books.text 內(nèi)容:

1) A Storm of Swords, George R. R. Martin, 1216 
2) The Two Towers, J. R. R. Tolkien, 352 
3) The Alchemist, Paulo Coelho, 197 
4) The Fellowship of the Ring, J. R. R. Tolkien, 432 
5) The Pilgrimage, Paulo Coelho, 288 
6) A Game of Thrones, George R. R. Martin, 864 

讓我們考慮有n個前3個 sed命令和正經(jīng)過兩個sed命令如下:

Sed command #1 
Sed command #2 
Sed command #3 
n command 
Sed command #4 
Sed command #5

這里,Sed應(yīng)用于前三個命令對模式緩沖存儲器,清除模式緩沖器,讀取下一行到模式緩沖區(qū),然后添加在第四和第五指令就可以了。

保持緩沖器保存的數(shù)據(jù),但用sed命令不能在保持緩沖器直接應(yīng)用。因此,我們需要使保持緩沖器數(shù)據(jù)轉(zhuǎn)換成模式緩沖區(qū)。Sed提供了x 命令模式和保持緩沖區(qū)的內(nèi)容。下面的命令說明x命令。

讓我們稍微修 改books.txt 文件。該文件包含書名其次是它們的作者名稱如下:

A Storm of Swords 
George R. R. Martin 
The Two Towers 
J. R. R. Tolkien 
The Alchemist 
Paulo Coelho 
The Fellowship of the Ring 
J. R. R. Tolkien 
The Pilgrimage 
Paulo Coelho 
A Game of Thrones 
George R. R. Martin 

讓我們交換兩個緩沖區(qū)的內(nèi)容。例如,下面的示例打印的作者只名稱。

[jerry]$ sed -n 'x;n;p' books.txt 

在執(zhí)行上面的代碼,會得到如下結(jié)果:

George R. R. Martin 
J. R. R. Tolkien 
Paulo Coelho 
J. R. R. Tolkien 
Paulo Coelho 
George R. R. Martin 

讓我們來了解此命令的工作原理。

  • 最初,Sed讀取第一行,即A Storm of Swords入模式緩沖區(qū)中。

  • x 命令移動該行保持緩沖區(qū)。

  • n 讀取下一行,即,George R. R. Martin到模式緩沖區(qū)。

  • 將控制傳遞到該命令后跟n打印出模式緩沖區(qū)的內(nèi)容。

  • 這個過程一直重復(fù),直到文件被讀完。

現(xiàn)在讓我們印刷,這將導(dǎo)致印刷書籍的標(biāo)題前交換緩沖區(qū)的內(nèi)容。

[jerry]$ sed -n 'x;n;x;p' books.txt 

執(zhí)行上面的代碼,得到如下結(jié)果:

A Storm of Swords
The Two Towers
The Alchemist
The Fellowship of the Ring
The Pilgrimage
A Game of Thrones

h 命令

h命令處理保持緩沖區(qū)。從模式緩沖區(qū),以保持它的緩沖區(qū)拷貝數(shù)據(jù)。從保持現(xiàn)有的緩存數(shù)據(jù)被覆蓋。需要注意的是-h命令不動的數(shù)據(jù),它只是復(fù)制數(shù)據(jù)。因此,復(fù)制的數(shù)據(jù)保持,因為它是在模式緩沖區(qū)。下面給出的是-h命令的語法。

[address1[,address2]]h 

下面的命令打印標(biāo)題-作家Paulo Coelho。

[jerry]$ sed -n '/Paulo/!h; /Paulo/{x;p}' books.txt 

執(zhí)行上面的代碼,得到如下結(jié)果:

The Alchemist 
The Pilgrimage

H 命令

h命令破壞了保持緩沖器以前的內(nèi)容。這并不總是可以接受的,因為有時我們需要保留的內(nèi)容。為了這個目的,sed提供了通過添加一個新行,在所述端部追加的內(nèi)容,以保持緩沖器為H命令。 h和H的命令之間的唯一差別是,保持緩沖器前者重寫數(shù)據(jù),而后來的數(shù)據(jù)追加到保持緩沖器。它的語法類似于這是如下的h命令:

[address1[,address2]]H

讓我們再舉一個例子。而不是僅打印書名這一次,打印其作者的名字了。下面的例子打印書名后面的作者姓名。

[jerry]$ sed -n '/Paulo/!h; /Paulo/{H;x;p}' books.txt 

執(zhí)行上面的代碼,得到如下結(jié)果:

The Alchemist 
Paulo Coelho 
The Pilgrimage
Paulo Coelho

g 命令

我們學(xué)會了如何復(fù)制/追加模式緩沖區(qū)中的內(nèi)容保存緩沖區(qū)。我們可以執(zhí)行相反的功能呢?肯定是的!為了這個目的,Sed提供 g 命令其副本從保持緩沖器到模式緩沖區(qū)中的數(shù)據(jù)。而復(fù)制,從模式空間現(xiàn)有的數(shù)據(jù)被覆蓋。下面給出了g命令的語法。

[address1[,address2]]g

讓我們考慮相同的例子- 在打印的書名和作者。這一次,我們將首先打印的作者和下一行,相應(yīng)的題書的名字。下面的命令打印的作者Paulo Coelho,其次是它的書名的名字。

[jerry]$ sed -n '/Paulo/!h; /Paulo/{p;g;p}' books.txt 

執(zhí)行上面的代碼,會得到如下結(jié)果:

Paulo Coelho 
The Alchemist 
Paulo Coelho 
The Pilgrimage

G 命令

同樣,我們可以追加保持緩沖器中的內(nèi)容到模式緩沖區(qū)。Sed提供G指令它通過添加一個新行,在末尾追加內(nèi)容到圖案緩沖區(qū)。它的語法是類似于g命令是如下:

[address1[,address2]]G

現(xiàn)在,就讓我們來它打印的作者Paulo Coelho隨后其書名名稱前面的例子。為了達(dá)到同樣的效果,請執(zhí)行以下sed命令。

[jerry]$ sed -n '/Paulo/!h; /Paulo/{G;p}' books.txt

執(zhí)行上面的代碼,會得到如下結(jié)果:

Paulo Coelho 
The Alchemist 
Paulo Coelho 
The Pilgrimage

可以修改上面的例子中,只需更換G指令之前,緩沖區(qū)的內(nèi)容如下顯示書名后面他們的作者:

[jerry]$ sed -n '/Paulo/!h; /Paulo/{x;G;p}' books.txt

執(zhí)行上面的代碼,會得到如下結(jié)果:

The Alchemist 
Paulo Coelho 
The Pilgrimage 
Paulo Coelho 

上一篇:Sed模式范圍下一篇:Sed基本命令