亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
123下一頁(yè)
最近訪問(wèn)板塊 發(fā)新帖
查看: 10084 | 回復(fù): 20
打印 上一主題 下一主題

sed (function Argument) 大全!  關(guān)閉 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2005-12-21 17:38 |只看該作者 |倒序?yàn)g覽
各位大家好!偶是一個(gè)新人,學(xué)習(xí)shell基本上通過(guò)通讀論壇上高手的貼子來(lái)前進(jìn)的。在學(xué)習(xí)的過(guò)程也遇到過(guò)很多問(wèn)題,每每苦惱中總能得到CU上XDJM的耐心指點(diǎn)。關(guān)于wingger 同志發(fā)表了shell基礎(chǔ)十二篇讓某好生歡喜,但是在學(xué)習(xí)sed命令時(shí),發(fā)現(xiàn)論壇上依然有很多朋友對(duì)于一些sed (function Argument)難于理解,自己剛開始也是這樣,總結(jié)了一下原因,主要覺得還是沒有非常系統(tǒng)的
資料和好的sample來(lái)參照理解。所以某家這幾天在網(wǎng)上仔細(xì)的查了一下,收集了一份非常詳細(xì)的sed (function Argument)還帶例子有很多都是《inux與unix shell編程指南》所有沒涉及到的東東,分享給大家,希望對(duì)大家有所幫助。學(xué)習(xí)經(jīng)驗(yàn)、心得只有通過(guò)分享才能共同進(jìn)步呀!
繁體!
----------------------------------------------------------------------------------------
介紹函數(shù)參數(shù)

4.1 s
   函數(shù)參數(shù) s 表示替換(substitute)文件內(nèi)字串。其指令格式如下 :
[address1[ ,address2]] s/pattern/replacemen/[flag]
對(duì)上述格式有下面幾點(diǎn)說(shuō)明 :

函數(shù)參數(shù) s 最多與兩個(gè)位址參數(shù)配合。
關(guān)於 "s/pattern/replacement/[flag]"(註解[12]) 有下面幾點(diǎn)說(shuō)明:
pattern : 它為 reguler expression 字串。它表示文件中要被替換的字串。
replacement : 它為一般字串。但其內(nèi)出現(xiàn)下列字元有特別意義 :

& : 代表其前 pattern 字串。例如
sed -e 's/test/& my car/' 資料檔名   

指令中 , & 代表 pattern 字串 "test"。故執(zhí)行後 , 資料檔的 "test" 被替換成 "test my car"。
\n : 代表 pattern 中被第 n 個(gè) \( 、\)(參照[附錄 A]) 所括起來(lái)的字串。例如
sed -e  's/\(test\) \(my\) \(car\)/[\2 \3 \1]/' 資料檔名   

指令中 , \1 表示 "test"、\2 表示 "my"、\1 表示 "car" 字串。故執(zhí)行後 , 資料檔的 "test my car" 被替換成 "[my car test]"。
\ : 可用它來(lái)還原一些特殊符號(hào)(如上述的 & 與 \ )本身字面上的意義 , 或用它來(lái)代表?yè)Q行。
flag : 主要用它來(lái)控制一些替換情況 :
當(dāng) flag 為 g 時(shí) , 代表替換所有符合(match)的字串 。
當(dāng) flag 為十進(jìn)位數(shù)字 m 時(shí) , 代表替換行內(nèi)第 m 個(gè)符合的字串。
當(dāng) flag 為 p 時(shí) , 代表替換第一個(gè)符合 pattern 的字串後 , 將資料輸出標(biāo)準(zhǔn)輸出檔。
當(dāng) flag 為 w wfile 時(shí) , 代表替換第一個(gè)符合 pattern 的字串後 , 輸出到 wfile 檔內(nèi)(如果 wfile 不存在 , 則會(huì)重新開啟名為 wfile 的檔案)。
當(dāng)沒有 flag 時(shí) , 則將資料行內(nèi)第一個(gè)符合 pattern 的字串以 replacement 字串來(lái)替換 。
delimiter : 在 "/pattern/replace/[flag] " 中 "/" 被當(dāng)成一 delimiter。除了空白(blank)、換行(newline) 之外 , 使用者可用任何字元作為 delimiter。例如下述編輯指令
        s#/usr#/usr1#g

上述命令中 \verb|#| 為 delimiter。如果用 "/" 做 delimiter , 則 sed 會(huì)將 pattern 與 replacement 中的 "/" 當(dāng)成 delimiter 而發(fā)生錯(cuò)誤。
範(fàn)例:
題目 : 替換 input.dat 檔(後面如果沒有特別指定 , 均假設(shè)文件檔名為 input.dat)內(nèi) "1996" 字串成 "1997" , 同時(shí)將這些資料行存入 year97.dat 檔內(nèi)。
說(shuō)明 : 用函數(shù)參數(shù) s 指示 sed 將 "1996" 字串替換成 "1997" , 另外用 s argument 中的 flag w 指示 sed 將替換過(guò)的資料行存入 year97.dat 檔內(nèi)。
sed 命令列:
sed -e 's/1996/1997/w year97.dat' input.dat



4.2 d
函數(shù)參數(shù) d 表示刪除資料行 , 其指令格式如下:

       [address1[ ,address2]] d


對(duì)上述格式有下面幾點(diǎn)說(shuō)明:

函數(shù)參數(shù) d 最多與兩個(gè)位址參數(shù)配合。
sed 執(zhí)行刪除動(dòng)作情況如下 :
將 pattern space 內(nèi)符合位址參數(shù)的資料刪除。
將下一筆資料讀進(jìn) pattern space 。
重新執(zhí)行 sed script。
範(fàn)例 : 可參考 section 3.3。



4.3 a
函數(shù)參數(shù) a 表示將資料添加到文件中。其指令格式如下:

       [address1] a\        使用者所輸入的資料

對(duì)上述格式有下面幾點(diǎn)說(shuō)明:


函數(shù)參數(shù) a 最多與一個(gè)位址參數(shù)配合。
函數(shù)參數(shù) a 緊接著 "\" 字元用來(lái)表示此行結(jié)束 , 使用者所輸入的資料必須從下一行輸入。如果資料超過(guò)一行 , 則須在每行的結(jié)尾加入"\"。
sed 執(zhí)行添加動(dòng)作情況如下 : 當(dāng) pattern space 內(nèi)資料輸出後 , sed 跟著輸出使用者所輸入的資料。
範(fàn)例 :
題目: 添加 "多工作業(yè)系統(tǒng)" 在含 "UNIX" 字串的資料行後。假設(shè) input.dat 檔的內(nèi)容如下 :
UNIX

說(shuō)明: 用函數(shù)參數(shù) a 將所輸入的資料添加在含 "UNIX" 字串的資料行後。
sed 命令列如下 :
sed -e '/UNIX/a\
多工作業(yè)系統(tǒng)
' input.dat

執(zhí)行上述命令後 , 其輸出結(jié)果如下 :
UNIX
多工作業(yè)系統(tǒng)



4.4 i
函數(shù)參數(shù) i 表示將資料插入文件中。其指令格式如下:
       [address1] i\        使用者所輸入的資料


對(duì)上述格式有下面幾點(diǎn)說(shuō)明:

函數(shù)參數(shù) i 最多與一個(gè)位址參數(shù)配合。
函數(shù)參數(shù) i 緊接著 "\" 字元用來(lái)表示此行結(jié)束 , 使用者所輸入的資料必須從下一行輸入。如果資料超過(guò)一行 , 則須在每行的結(jié)尾加入"\"。
sed 執(zhí)行插入動(dòng)作的情況如下 : 在 pattern space 內(nèi)資料輸出前 , sed 先輸出使用者所輸入的資料。
範(fàn)例 :
題目: 將 "文章版權(quán)屬於中央研究院" 插在 input.dat 檔中含 "院長(zhǎng) : 李遠(yuǎn)哲" 的資料行之前。假設(shè) input.dat 檔內(nèi)容如下 :
院長(zhǎng) : 李遠(yuǎn)哲

說(shuō)明: 用函數(shù)參數(shù) i 將資料行 "文章版權(quán)屬於中央研究院" 插在含 "院長(zhǎng) : 李遠(yuǎn)哲" 的資料行之前。
sed 命令列如下:
sed -e '/院長(zhǎng) : 李遠(yuǎn)哲/i\
文章版權(quán)屬於中央研究院
' input.dat

執(zhí)行上述命令後的輸出如下 :
文章版權(quán)屬於中央研究院
院長(zhǎng) : 李遠(yuǎn)哲



4.5 c
函數(shù)參數(shù) c 表示改變文件中的資料。其格式如下:
     [address1[ ,address2]]c\      使用者所輸入的資料


對(duì)上述格式有下面幾點(diǎn)說(shuō)明:

函數(shù)參數(shù) c 最多與兩個(gè)位址參數(shù)配合。
函數(shù)參數(shù) c 緊接著 "\" 字元用來(lái)表示此行結(jié)束 , 使用者所輸入的資料必須從下一行輸入。如果資料超過(guò)一行 , 則須在每行的結(jié)尾加入"\"。
sed 執(zhí)行改變動(dòng)作的情況 : 在 pattern space 內(nèi)資料輸出時(shí) , sed 改變它成為使用者所輸入的資料。
範(fàn)例 : 參考 section 3.1 之例二、三。



4.6 p
函數(shù)參數(shù) p 表示印出資料。其指令格式如下 :
     [address1[ , address2]] p


對(duì)於上述格式有下面幾點(diǎn)說(shuō)明 :

函數(shù)參數(shù) p 最多與兩個(gè)位址參數(shù)配合。
sed 執(zhí)行印出動(dòng)作的情況如下 : sed 拷備一份 pattern space 內(nèi)容至標(biāo)準(zhǔn)輸出檔。
範(fàn)例 : 參考 section 3.4 開頭的內(nèi)容。



4.7 l
函數(shù)參數(shù) l , 除可將資料中的 nonprinting character 以 ASCII碼列出外 , 其於均與函數(shù)參數(shù) p 相同。例如 , 將下面 input.dat 檔中的 ^[ 以 ASCII 碼印出

The Great ^[ is a movie starring Steve McQueen.

執(zhí)行命令 sed -e 'l' input.dat 後 , 則輸出結(jié)果如下 :
The Great \003 is a movie starring Steve McQueen.
The Great     is a movie starring Steve McQueen.

上述第二行資料為 sed 的自動(dòng)輸出(請(qǐng)參照註解[]。




4.8 r
函數(shù)參數(shù) r 表示讀入它檔案內(nèi)容到文件中。其指令格式如下 :

       [address1] r 它檔名稱


對(duì)於上述格式有下面幾點(diǎn)說(shuō)明 :

函數(shù)參數(shù) r 最多與一個(gè)位址參數(shù)配合。
在指令中 , 函數(shù)參數(shù) r 與它檔名稱間 , 只能有一空格。
sed 執(zhí)行讀入動(dòng)作的情況如下 : 在 pattern space 內(nèi)資料輸出後 , sed 讀出它檔的內(nèi)容跟著輸出。當(dāng)它檔不存在時(shí) , sed 照樣執(zhí)行其它指令而不會(huì)有任何錯(cuò)誤訊息產(chǎn)生。
範(fàn)例 : 參考 section 3.1 之例三。




4.9 w
函數(shù)參數(shù) w 表示將文件中的寫到它檔內(nèi)。其指令格式如下 :

     [address1[ ,address2]] w 它檔名稱


對(duì)於上述格式有下面幾點(diǎn)說(shuō)明 :

函數(shù)參數(shù) w 最多與兩個(gè)位址參數(shù)配合。
在指令中 , 函數(shù)參數(shù) w 與它檔名稱間 , 只能有一空格。
sed 執(zhí)行寫出動(dòng)作的情況如 : 將 pattern space 內(nèi)資料寫到它檔內(nèi)。資料寫入時(shí) , 會(huì)取代(overwrite)原來(lái)檔案內(nèi)的資料。另外 , 當(dāng)它檔不存在時(shí) , sed 會(huì)重新產(chǎn)生(creat)它。
範(fàn)例:參考 section 3.1 之例二。




4.10 y
函數(shù)參數(shù) y 表示轉(zhuǎn)換資料中的字元。其指令格式如下 :

     [address1[ ,address2]]y /xyz.../abc.../


對(duì)於上述格式有下面幾點(diǎn)說(shuō)明 :

函數(shù)參數(shù)最多配合兩個(gè)位址參數(shù)。
指令中 , /abc.../xyz.../(x、y、z、a、b、c 代表某些字元) 為 y 的 argument 。其中 abc... 與 xyz... 的字元個(gè)數(shù)必須相同。
sed 執(zhí)行轉(zhuǎn)換時(shí) , 將 pattern space 內(nèi)資料內(nèi)的 a 字元轉(zhuǎn)換成 x 字元 、b 字元轉(zhuǎn)換成 y 字元 、c 字元轉(zhuǎn)換成 z 字元 ...。
範(fàn)例:
題目: 將 input.dat 檔中的小寫字母改成大寫。假設(shè) input.dat 檔的內(nèi)容如下 :
Sodd's Second Law:
        Sooner or later, the worst possible set of
        circumstances is bound to occur.

說(shuō)明:利用函數(shù)參數(shù) y 指示 sed 做字母大小的轉(zhuǎn)換。
sed 命令列如下 :
sed -e '
y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/
' input.dat

執(zhí)行上述命令輸出結(jié)果如下 :
SODD'S SECOND LAW:
        SOONER OR LATER, THE WORST POSSIBLE SET OF
        CIRCUMSTANCES IS BOUND TO OCCUR.




4.11 !
函數(shù)參數(shù) ! 表示不執(zhí)行函數(shù)參數(shù)。當(dāng)有如下指令時(shí) ,

     [address1[ , address2]] ! 函數(shù)參數(shù)


表示 , 對(duì)符合位址參數(shù)之資料不執(zhí)行函數(shù)參數(shù)。例如刪除 , 除了含 "1996" 字串 , 所有資料行 , 則執(zhí)行如下命令

sed -e '/1996/!d' input.dat




4.12 n
函數(shù)參數(shù) n 表示讀入下一行資料。其指令格式如下:

     [address1[ ,address2]] n


對(duì)上述格式有下面幾點(diǎn)說(shuō)明 :

函數(shù)參數(shù) n 最多配合兩個(gè)位址參數(shù)。
sed 執(zhí)行讀入下一行動(dòng)作的情況如下 :
輸出在 pattern space 的資料。
將下一筆資料讀到 pattern space。
執(zhí)行下一個(gè)編輯指令。
範(fàn)例(可與[section4.18]中的範(fàn)例比較):
題目 : 輸出 input.dat 檔內(nèi)偶數(shù)行資料。假設(shè) input.dat 檔內(nèi)容如下:
The
UNIX
Operation
System

說(shuō)明: 在命令列上
以選項(xiàng) -n , 將資料輸出的控制權(quán)(參照[section2.5])轉(zhuǎn)給指令。
利用函數(shù)參數(shù) n 將下一行資料(偶數(shù)行)取代 pattern space 內(nèi)的資料行(奇數(shù)行)。
利用函數(shù)參數(shù) p 將 pattern space 內(nèi)的資料(偶數(shù)行)輸出。
最後 , 整個(gè)輸出只有原先檔內(nèi)的偶數(shù)行資料。
sed 命令列如下 :
sed -n -e 'n' -e 'p' infro.dat

執(zhí)行上述命令後 , 輸出的結(jié)果如下 :
UNIX
System



4.13 q
函數(shù)參數(shù) q 表示跳離 sed 。其指令格式如下:

     [address1] q




對(duì)上述格式有下面幾點(diǎn)說(shuō)明 :

函數(shù)參數(shù) q 最多配合一個(gè)位址參數(shù)。
sed 執(zhí)行跳離動(dòng)作時(shí) , 它停止輸入 pattern space 資料 , 同時(shí)停止資料送到標(biāo)準(zhǔn)輸出檔。
範(fàn)例 :
題目: 對(duì)文件檔執(zhí)行 script_file 內(nèi)的編輯指令 , 除非遇到 "Linux" 字串。
說(shuō)明: 無(wú)論 script_file 內(nèi)是何種指令 , 使用者只要在命令列上用指令/Linux/q , 函數(shù)參數(shù) q 會(huì)強(qiáng)迫 sed 遇到 "Linux" 時(shí)做跳離動(dòng)作。
sed 命令列如下 :
sed -e '/Linux/q' -f script_file  input.dat



4.14 =
函數(shù)參數(shù) = 表示印出資料的行數(shù)。其指令格式如下:

     [address1 ,[address2]] =


對(duì)上述格式有下面幾點(diǎn)說(shuō)明 :

函數(shù)參數(shù) = 最多配合兩個(gè)位址參數(shù)。
執(zhí)行時(shí) , 行數(shù)將在資料輸出前先輸出。
範(fàn)例 :
題目: 印出 input.dat 檔內(nèi)資料行數(shù)。假設(shè) input.dat 的內(nèi)容如下 :
The UNIX
Operating System

說(shuō)明 : 用函數(shù)參數(shù) = 來(lái)印出資料的行數(shù)。
sed 命令列如下 :
sed -e '=' input.dat

執(zhí)行上述命令後 , 輸出的結(jié)果如下 :
1
The UNIX
2
Operating System

[ 本帖最后由 mocou 于 2005-12-21 20:42 編輯 ]

論壇徽章:
0
2 [報(bào)告]
發(fā)表于 2005-12-21 17:39 |只看該作者

get on

4.15 #
在 script file 內(nèi) , 函數(shù)參數(shù) # 後的文字為注解。當(dāng)注解文字超過(guò)多行時(shí) , 其行間須以 "\" 換行字元相隔。



4.16 N
函數(shù)參數(shù) N 表示添加下一筆資料在 pattern space 內(nèi)。其指令格式如下:

     [address1 ,[address2]] N


對(duì)上述格式有下面幾點(diǎn)說(shuō)明 :

函數(shù)參數(shù) N 最多配合兩個(gè)位址參數(shù)。
sed 執(zhí)行時(shí) , 將下一行資料讀入並添加在 pattern space 內(nèi) , 資料行間以換行字元(embedded newline character)分隔。此外 , 在替換時(shí) , 換行字元可用 \n 來(lái) match。
範(fàn)例 :
題目: 將下述兩行資料合併。假設(shè) input.dat 的內(nèi)容如下 :
The UNIX
Operating System

說(shuō)明 : 先利用函數(shù)參數(shù) N 將兩行資料置於 pattern space 內(nèi) , 在利用函數(shù)參數(shù) s/\n/ / 將兩行資料間的分隔號(hào) \n 以空白替代 , 如此兩行資料變成一行輸出。
sed 命令列如下 :
sed -e 'N' -e 's/\n/ /' input.dat

執(zhí)行上述命令後 , 其輸出的結(jié)果如下:
The UNIX Operating System



4.17 D
函數(shù)參數(shù) D 表示刪除 pattern space 內(nèi)的第一行資料。其指令格式如下:

     [address1,address2]D


對(duì)上述格式有下面幾點(diǎn)說(shuō)明 :

函數(shù)參數(shù) D 最多配合兩個(gè)位址參數(shù)。
函數(shù)參數(shù) D 與 d 的比較如下 :
當(dāng) pattern space 內(nèi)只有一資料行時(shí) , D 與 d 作用相同。
當(dāng) pattern space 內(nèi)有多行資料行時(shí)
D 表示只刪除 pattern space 內(nèi)第一行資料 ; d 則全刪除。
D 表示執(zhí)行刪除後 , pattern space 內(nèi)不添加下一筆資料 , 而將剩下的資料重新執(zhí)行 sed script ; d 則讀入下一行後執(zhí)行 sed script。
範(fàn)例 : 參考 section 3.3 的第二個(gè)例子。




4.18 P
函數(shù)參數(shù) P 表示印出 pattern space 內(nèi)的第一行資料。其指令格式如下:

     [address1,address2] P


對(duì)上述格式有下面幾點(diǎn)說(shuō)明 :

函數(shù)參數(shù) P 最多配合兩個(gè)位址參數(shù)。
P 與 p , 除了面對(duì)的 pattern space 內(nèi)的資料行數(shù)不同外 , 其它均相同。
範(fàn)例(可與[section4.12]中的範(fàn)例):
題目 : 輸出 input.dat 檔內(nèi)奇數(shù)行資料。假設(shè) input.dat 檔內(nèi)容如下:
The
UNIX
System

說(shuō)明: 在命令列上
以選項(xiàng) -n , 將資料輸出的控制權(quán)(參照[section2.5])轉(zhuǎn)給指令。
利用函數(shù)參數(shù) N 將偶數(shù)行添加至 pattern space 內(nèi)奇數(shù)行後。
利用函數(shù)參數(shù) P 將 pattern space 內(nèi)的第一行(奇數(shù)行)輸出。
在奇數(shù)行輸出後 , pattern space 內(nèi)剩下的資料行(偶數(shù)行)則被放棄輸出。最後 , 整個(gè)輸出只有原先的奇數(shù)行資料。
sed 命令列 :
sed -n -e 'N' -e 'P' infro.dat

執(zhí)行上述命令後 , 輸出的結(jié)果如下 :
The
System




4.19 h
函數(shù)參數(shù) h 表示暫存 pattern space 的資料至 hold space。其指令格式如下:

     [address1 ,[address2]] h


對(duì)上述格式有下面幾點(diǎn)說(shuō)明 :

函數(shù)參數(shù) h 最多配合兩個(gè)位址參數(shù)。
sed 執(zhí)行暫存動(dòng)作時(shí) , 會(huì)蓋掉(overwrite) hold space 內(nèi)原來(lái)的資料。
當(dāng) sed 全部執(zhí)行結(jié)束時(shí) , hold space 內(nèi)資料會(huì)自動(dòng)清除。
範(fàn)例 :參考 section 3.4 的例子。




4.20 H
函數(shù)參數(shù) H 與 h 唯一差別是 , sed 執(zhí)行 h 時(shí) , 資料蓋掉(overwrite) hold space 內(nèi)原來(lái)的資料 , 而 H , 資料則是 "添加(append)" 在 hold space 原來(lái)資料後。例題請(qǐng)參考 section 3.2 之例一。



4.21 g
   函數(shù)參數(shù) g 表示與函數(shù)參數(shù) h 相反的動(dòng)作 , 它表示將 hold space 內(nèi)資料放回 pattern space 內(nèi)。其指令格式如下 :

     [address1,address2]g




函數(shù)參數(shù) g 最多配合兩個(gè)位址參數(shù)。
sed 執(zhí)行放回動(dòng)作時(shí) , 資料蓋掉(overwrite)(註解[13]) pattern space 內(nèi)原來(lái)的資料。
例題 :參考 section 3.4 的例子。




4.22 G
函數(shù)參數(shù) G 與 g 唯一差別是 , sed 執(zhí)行 g 時(shí) , 資料蓋掉(overwrite) pattern space 內(nèi)原來(lái)的資料 , 而 G , 資料則是 "添加(append)" 在 pattern space 原來(lái)資料後。例子請(qǐng)參考 section 3.2 例一。



4.23 x
   函數(shù)參數(shù) x 表示交換 hold space 與 pattern space 內(nèi)的資料。其指令格式如下 :

     [address1 ,[address2]] x


函數(shù)參數(shù) x 大部份與其它處理 hold space 的函數(shù)參數(shù)一起配合。例如 , 將 input.dat 檔內(nèi)第 1 行資料取代第 3 行資料。此時(shí) , 用函數(shù)參數(shù) h 與 x 來(lái)配合。其中 , 以函數(shù)參數(shù) h 將第 1 資料存入 hold space ; 當(dāng)?shù)?3 行資料出現(xiàn)在 pattern space , 以函數(shù)參數(shù) x 交換 hold space 與 pattern space 的內(nèi)容。如此 , 第 3 行資料就被第 1 資料替代。其命令列如下:

sed -e '1h' -e '3x' input.dat




4.24 b、:label
函數(shù)參數(shù) : 與函數(shù)參數(shù) b 可在 sed script 內(nèi)建立類似 BASIC 語(yǔ)言中 GOTO 指令的功能。其中 , 函數(shù)參數(shù) : 建立標(biāo)記;函數(shù)參數(shù) b 將下一個(gè)執(zhí)行的指令 branch 到標(biāo)記處執(zhí)行。函數(shù)參數(shù) : 與 b , 在 script file 內(nèi)配合的情況如下
   
                   .
                   .
                   .
              編輯指令m1
              :記號(hào)
              編輯指令m2
                   .
                   .
                   .               
              [address1,[address2]]b [記號(hào)]                  

其中 , 當(dāng) sed 執(zhí)行至指令 [address1,[address2]]b [記號(hào)] 時(shí) , 如 pattern space 內(nèi)的資料符合位址參數(shù) , 則 sed 將下一個(gè)執(zhí)行的位置 branch 至由 :記號(hào)(註解[14])設(shè)定的標(biāo)記處 , 也就是再由 "編輯指令m2" ... 執(zhí)行。另外 , 如果指令中函數(shù)參數(shù) b 後沒有記號(hào) , 則 sed 將下一個(gè)執(zhí)行的指令 branch 到 script file 的最後 , 利用此可使 sed script 內(nèi)有類似 C 語(yǔ)言中的 case statement 結(jié)構(gòu)。
範(fàn)例 :
題目: 將 input.dat 檔內(nèi)資料行的開頭字母重覆印 40 次。假設(shè) input.dat 檔的內(nèi)容如下 :

A
B
C

說(shuō)明: 用指令 b p1 與 :p1 構(gòu)成執(zhí)行增加字母的迴圈(loop) , 同時(shí)在字母出現(xiàn) 40 個(gè)時(shí) , 也用指令 b 來(lái)跳出迴圈。下面就以檔內(nèi)第一行資料 "A" 為例 , 描述它如何連續(xù)多添加 39 個(gè) "A" 在同一行:
用指令 s/A/AA/(參照 section4.1)將 "A" 替換成 "AA"。
用指令 b p1 與 :p1 構(gòu)成迴圈(loop) , 它目的使上述動(dòng)作被反覆的執(zhí)行。每執(zhí)行一次迴圈 , 則資料行上的 "A" 就多出一個(gè)。例如 , 第一次迴圈資料行變成 "AA" , 第二次迴圈資料行變成 "AAA" ...。
用指令 [ABC]\{40\}/b(註解[15]) 來(lái)作為停止迴圈的條件。當(dāng)資料行有連續(xù) 40 個(gè) A 出現(xiàn)時(shí) , 函數(shù)參數(shù) b 將執(zhí)行的指令跳到最後 , 停止對(duì)此行的編輯。
同樣 , 對(duì)其它資料行也如同上述的方式執(zhí)行。
sed 命令列如下 :
sed -e '{
:p1
/A/s/A/AA/
/B/s/B/BB/
/C/s/C/CC/
/[ABC]\{40\}/b
b p1
}' input.dat



4.25 t
基本上 , 函數(shù)參數(shù) t 與 函數(shù)參數(shù) b 的功能類似 , 除了在執(zhí)行 t 的 branch 前 , 會(huì)先去測(cè)試其前的替換指令有沒有執(zhí)行替換成功外。在 script file 內(nèi)的情況如下:
                   .
                   .
                   .
              編輯指令m1
              :記號(hào)
              編輯指令m2
                   .
                   .
                   .
              s/.../.../
              [address1,[address2]]t [記號(hào)]
              編輯指令m3

其中 , 與函數(shù)參數(shù) b 不同處在於 , 執(zhí)行函數(shù)參數(shù) t branch 時(shí) , 會(huì)先檢查其前一個(gè)替換指令成功與否。如成功 , 則執(zhí)行 branch ; 不成功 , 則不 branch , 而繼續(xù)執(zhí)行下一個(gè)編輯指令 , 例如上面的編輯指令m3。
範(fàn)例:
題目 : 將 input.dat 檔中資料 A1 替換成 C1、C1 替換成 B1、B1 替換成 A1。input.dat 檔的內(nèi)容如下:
代號(hào)
B1
A1
B1
C1
A1
C1

說(shuō)明 : input.dat 檔中全部資料行只需要執(zhí)行一次替換動(dòng)作 , 但為避免資料被替換多次 , 所以利用函數(shù)參數(shù) t 在 sed script 內(nèi)形成一類似 C 語(yǔ)言中 case statement 結(jié)構(gòu) , 使每行資料替換一次後能立即用函數(shù)參數(shù) t 跳離替換編輯。
sed 命令列 :
sed -e '{
s/A1/C1/
t
s/C1/B1/
t
s/B1/A1/
t
}' input.dat



--------------------------------------------
常用的 regular expression


--------------------------------------------------------------------------------

常用的 regular expression
普通字元  由普通字元所組成的 regular expression 其意義與原字串字面意義相同。  
^字串  限制字串必須出現(xiàn)於行首 。
$字串  限制字串必須出現(xiàn)行尾。  
.  表示任意一字元。
[...]  字元集合, 用以表示兩中括號(hào)間所有字元當(dāng)中的任一個(gè) ,如 [^...]表示兩中括號(hào)間所有字元以外的字元。
-&  字元集合中可用"&"指定字元的範(fàn)圍。  
*  用以形容其前的字元(或字元集合)可重覆任意多次 。
\n  表示嵌入新行字元(imbedded new line character)。  
\(...\)  於 regular expression 中使用"\(" "\)"來(lái)括住一部份的 regular expression ; 其後可用"\1"來(lái)表示第一個(gè)被"\(" "\)"括住的部份。若 regular expression 中使用數(shù)次的"\(" "\)"來(lái)括住不同的部份 , 則依次使用"\1","\2","\3",...(最多可到"\9")。

[ 本帖最后由 mocou 于 2005-12-21 20:46 編輯 ]

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2005-12-21 18:08 |只看該作者
好貼,收藏了

論壇徽章:
1
榮譽(yù)會(huì)員
日期:2011-11-23 16:44:17
4 [報(bào)告]
發(fā)表于 2005-12-21 18:46 |只看該作者
這個(gè)跟精華里的十二篇之SED和sed1line 差不多!  不過(guò),我更愛看sed1line

論壇徽章:
0
5 [報(bào)告]
發(fā)表于 2005-12-21 20:56 |只看該作者
學(xué)習(xí) !

論壇徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亞冠之浦和紅鉆
日期:2015-06-23 19:10:532015亞冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16賽季CBA聯(lián)賽之山東
日期:2016-01-31 18:25:0515-16賽季CBA聯(lián)賽之四川
日期:2016-02-16 16:08:30程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-06-29 06:20:002017金雞報(bào)曉
日期:2017-01-10 15:19:5615-16賽季CBA聯(lián)賽之佛山
日期:2017-02-27 20:41:19
6 [報(bào)告]
發(fā)表于 2005-12-22 08:50 |只看該作者
原帖由 寂寞烈火 于 2005-12-21 18:46 發(fā)表
這個(gè)跟精華里的十二篇之SED和sed1line 差不多!  不過(guò),我更愛看sed1line

和這個(gè)差的更少,貼了XX次,就是沒人讀


http://phi.sinica.edu.tw/aspac/reports/96/96005/sed_sec_4.html

論壇徽章:
1
榮譽(yù)版主
日期:2011-11-23 16:44:17
7 [報(bào)告]
發(fā)表于 2005-12-22 08:54 |只看該作者
不就是那里的嗎

論壇徽章:
7
榮譽(yù)版主
日期:2011-11-23 16:44:17子鼠
日期:2014-07-24 15:38:07獅子座
日期:2014-07-24 11:00:54巨蟹座
日期:2014-07-21 19:03:10雙子座
日期:2014-05-22 12:00:09卯兔
日期:2014-05-08 19:43:17卯兔
日期:2014-08-22 13:39:09
8 [報(bào)告]
發(fā)表于 2005-12-22 13:18 |只看該作者
原帖由 waker 于 2005-12-22 08:50 發(fā)表

和這個(gè)差的更少,貼了XX次,就是沒人讀


http://phi.sinica.edu.tw/aspac/reports/96/96005/sed_sec_4.html

瓦克爾也急了
偶的sed1line轉(zhuǎn)帖了很久了,也是沒人讀,可是過(guò)了段時(shí)間又有人轉(zhuǎn)帖了一次,居然成了熱帖。為何呢?時(shí)運(yùn)啊,金子不一定總會(huì)發(fā)光。所以帖子發(fā)到了,責(zé)任也就盡到了,有心人自會(huì)看到,無(wú)心者你就是揪著耳朵也未必能看一眼。

論壇徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亞冠之浦和紅鉆
日期:2015-06-23 19:10:532015亞冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16賽季CBA聯(lián)賽之山東
日期:2016-01-31 18:25:0515-16賽季CBA聯(lián)賽之四川
日期:2016-02-16 16:08:30程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-06-29 06:20:002017金雞報(bào)曉
日期:2017-01-10 15:19:5615-16賽季CBA聯(lián)賽之佛山
日期:2017-02-27 20:41:19
9 [報(bào)告]
發(fā)表于 2005-12-22 14:33 |只看該作者
r2真是棒哥,你的笑容太燦爛了,shell版的笑臉功能終于恢復(fù)了?

論壇徽章:
1
榮譽(yù)版主
日期:2011-11-23 16:44:17
10 [報(bào)告]
發(fā)表于 2005-12-22 14:37 |只看該作者
奇怪。為什么2007可以,試試我的

您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過(guò)ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP