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

Sed循環(huán)

像其他的編程語(yǔ)言,sed還提供了一個(gè)循環(huán)和分支工具來(lái)控制程序的執(zhí)行流程。本教程將探討如何使用sed的循環(huán)和分支。

sed循環(huán)的工作原理類似于現(xiàn)代編程語(yǔ)言中的goto語(yǔ)句。 sed可以跳轉(zhuǎn)到標(biāo)記標(biāo)簽的行并繼續(xù)執(zhí)行下面提供該標(biāo)簽的剩余命令。

以下是對(duì)在sed定義一個(gè)標(biāo)簽的語(yǔ)法。在這里,冒號(hào)后的名稱(:)暗示的標(biāo)簽名稱。

:label 
:start 
:end 
:up

要跳轉(zhuǎn)到一個(gè)特定的標(biāo)簽,我們可以使用 b 命令后面跟標(biāo)簽名稱。如果標(biāo)簽的名稱省略,則 sed 跳轉(zhuǎn)到 sed 文件的末尾。

考慮一下我們有一個(gè)待處理文本文件books.txt ,它有以下內(nèi)容:

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

下面的例子是連接書(shū)名,并在一行用逗號(hào)分隔作者姓名。然后,它會(huì)搜索模式“Paulo”。如果能夠匹配,它打印一個(gè)連字符(- )在該行的前面,否則跳轉(zhuǎn)到打印行打印標(biāo)簽。

[jerry]$ sed -n ' 
h;n;H;x 
s/\n/, / 
/Paulo/!b Print 
s/^/- / 
:Print 
p' books.txt

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

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 

初看起來(lái),上面的腳本可能看起來(lái)神秘。讓我們看看這是什么情況。

  • 最初sed讀入模式緩沖區(qū)第一行即書(shū)名和保持緩沖區(qū)保持為空。后執(zhí)行-h命令模式緩沖區(qū)被復(fù)制到保留緩沖區(qū)。現(xiàn)在,這兩個(gè)緩沖區(qū)包含了本書(shū)即標(biāo)題. A Storm of Swords. 接下來(lái)n命令打印當(dāng)前的模式緩沖區(qū)(在本例中沒(méi)有打印出來(lái),因?yàn)?n選項(xiàng)),清除當(dāng)前圖形緩沖區(qū)讀取輸入的下一行?,F(xiàn)在模式緩沖區(qū)包含George R. R. Martin。

  • 第三個(gè)命令跳到僅當(dāng)模式不匹配,否則取代是由第四指令執(zhí)行的標(biāo)簽Print。

  • :Print 僅僅是一個(gè)標(biāo)簽名,p是打印命令。

為了提高可讀性,每個(gè)sed命令被放置在一個(gè)單獨(dú)的行。然而,人們可以選擇將所有命令在一行中,如下所示:

[jerry]$ sed -n 'h;n;H;x;s/\n/, /;/Paulo/!b Print; s/^/- /; :Print;p' books.txt 

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

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

上一篇:sed工作流程下一篇:Sed特殊字符