vi 中的正規表示式 (Regular Expression)(轉)

ba發表於2007-08-16
vi 中的正規表示式 (Regular Expression)(轉)[@more@].1. 定義和例子
============
正規表示式只是一個字元模板,用來在搜尋中匹配相同的字元.
在大多數的程式中,正規表示式是括在正斜槓中間的.
例如, /love/就是一個以正斜槓為分隔符的正規表示式,其中的
模板love 將用在搜尋所有行中與它匹配的字元. 更為有趣的是
正規表示式可以被特殊的元字元控制.讓我們透過下面的例子來進
一步瞭解這個概念.
有文字如下:
Hi tom,
I think I failed my anatomy test yesterday. I
had a terrible stomach ache. I ate too many
fried green tomatoes.
Anyway, Tom, Ineed your help. I'd like to make
the test up tomorrow, but don't know where to
begin studying. Do you think you could help me?
After work, about 7 PM, come to my place and I'll
treat you to pizza in return for your help.
Thanks.
Your pal,
guy@phantom

假設你發覺Tom 並沒有參加考試,而是David 參加的考試.同時還
發現, 在賀信中Tom的T用的是小寫.於是你決定做一個全文替換,把tom
替換為Tom.

在vi命令列模式下輸入:
:1, $s/tom/David/g
^ ^ ^ ^ ^
| | | | |---- global 對全文有效
| | | |
| | |--------- 將tom 替換為 David , 使用正規表示式.
| |------- 替換單詞
|------ 從檔案的第一行到檔案的最後一行.

替換後的文字如下:
Hi David,
I think I failed my anaDavidy test yesterday, I
had terible sDavidach ache. I ate too many
fried green Davidatoes.
Anyway, David, I need your help. I'd like to make
the test up Davidorrow, but don't know where to
begin studying. Do you think you could help me?
After work, about ? PM, come to my place and
I'll treat you to pizza in return for your help.
Thanks.
Your pal,
guy@phanDavid

我們發現有些單詞中含有tom的的也被替換了.
這是因為我們沒有使用正規表示式的元字元來界定一個模板從而控制
字元的替換動作.
使用:
:1, $s//David/g
就可以得到我們想要的結果了,即只替換單詞tom而不是含有tom字元的
單詞.

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617731/viewspace-961648/,如需轉載,請註明出處,否則將追究法律責任。

相關文章