學習vi和vim編輯器(8):全域替換(1)

來源:互聯網
上載者:User

學習vi和vim編輯器(8):全域替換(1)

本章學習vi編輯器中的全域替換命令。通過全域替換命令,可以自動替換檔案中所有出現過的某個單詞。全域替換一般會用到兩個ex命令:":g"(global),":s"(substitute)。

替換命令:

替換命令的文法如下: " :s/old/new/ ",該命令會將當前這一行中第一個出現的old模式替換為new。其中斜線用來分隔命令的各部分(如果斜線位於該命令的最後一個字元,則該斜線可以省略)。

" :s/old/new/g "會將當前這一行中的所有old模式替換為new。在s前面加上行地址,就可以指定替換命令將會影響的行範圍。例如 : " %s/old/new/g "就能將檔案中所有的old模式替換為new,如所示:該命令將檔案中的所有line替換為file。


而以下命令只會將檔案所有行中的第一個line替換為file:<喎?http://www.bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+PGltZyBzcmM9"http://www.2cto.com/uploadfile/Collfiles/20141228/2014122809525766.png" alt="\">

確認替換:

在使用搜尋和替換命令時,應該非常小心。可以在替換命令的結尾加上c選項(代表confirm),從而在每一次替換之前進行確認,如所示:



此時輸入y(代表"yes")即可對當前匹配的到的字串進行替換,而輸入n則不進行替換。

與上下文有關的替換:

有時,需要搜尋一個模式,當找到包含該模式的某個行時,將該行中的另一個字串進行替換。即搜尋模式並不是需要被替換的字串。此時可以通過如下命令實現 " :g/pattern/s/old/new/g "。其中第一個g代表對檔案中的所有行起作用,而最後一個g代表將每行中的所有old都替換為new(如果沒有這個g,則只會對每一行中的第一個old進行替換),patten即為搜尋模式。

如所示:該命令將搜尋所有包含" Line "模式的行,並將該行中的 "this "字串替換為" that "。


當用於搜尋的模式和用於替換的模式一樣時,就沒有必要重複輸入了。此時可以簡寫為 " :g/string/s//new/g ",該命令和 ":%s/string/new/g"命令效果一樣。

模式比對的規則:

除了可以搜尋常量字串,vi編輯器還可以搜尋可變的模式,即Regex。Regex是一種將一般字元和特殊的元字元結合起來的運算式。

用在搜尋模式中的元字元:

. (點號):匹配任何一個單一字元(除分行符號外);

* :匹配0到無窮多個前一個字元,因此 .* 即可匹配出任何數量的任何字元;

^:當^出現在Regex的開頭時,代表後面的Regex內容必須出現在一行的開頭。如果^不是出現在Regex的開頭,則沒有特殊含義;

$:當$出現在Regex的結尾時,代表前面的Regex內容必須出現在一行的結尾。如果$不是出現在Regex的結尾時,則沒有特殊含義;

\ : 相當於逸出字元,將後面的特殊字元當成一般的字元。

[ ]:匹配出方括弧裡的任何一個字元。例如p[aeu]t 匹配中pat,pet,put。而且如果匹配目標為一個範圍的字元,則可用第一個字元加上連字號,再加上最後一個字元來表示。例如,[A-Z] 匹配出A到Z之間的大寫字母,[0-9]匹配出0到9內的任何數字。而且方括弧內可以包含兩個以上的範圍,也可以混合使用範圍和單個字元。插入符號^作為方括弧內的第一個字元時,表示匹配出任何一個不在方括弧中字元範圍內的字元。

\(\):會將 \( 與 \) 之間的模式儲存到特殊的空間(稱為保留緩衝區)。這種方法可以儲存任何一行中的9個模式。

\< \> 會匹配出以某些字元開頭(\<)或結尾(\>)的單詞;

~:會匹配出上一次搜尋時所使用的Regex。

POSIX方括號運算式:

方括弧除了可以用於匹配出位於方括弧內的任何一個字元,POSIX引進了另外的方法,用於比較非英文字母的字元。在POSIX標準中,方括弧內的字元組稱為“方括號運算式”。方括號運算式中,除了可以有文字字元,還可以包括其它元素:

字元類:POSIX字元類包括了用 [: 與 :] 括起來的關鍵字。

校對符號:校對符號是由多個字元組成的序列,但是必須被當成一個單位。並且使用 [. 與 .]括起所需字元。

等價類別:等價類別列出所有應該被當成相等的字元集合,用[=與=]括起來。

這三類都必須出現在方括號運算式中,例如 [[:alpha:]!] 匹配出任何一個字母字元或者驚嘆號。具體的POSIX字元類型可以參看《vi和vim編輯器》第六章:全域替換。

用在替換字串中的元字元:

當做全域替換時,前面提到的具有特殊意義的元字元只能用在命令的搜尋部分,即第一部分。而在替換字串部分,這些元字元可能就失去了特殊意義。例如中的命令只會將A或B或C都替換為"[abc]",而不是相應的小寫字母。


但是在替換字串中,仍然存在一些具有特殊意義的元字元。

\n:利用 \( 與 \) 儲存的第n個模式做文本替換;

\:和搜尋模式中的 \ 字元含義相同,都是逸出字元,使後面的一個特殊字元變為一般字元,從而失去特殊含義;

&:當用在替換字元中,&會被替換為搜尋模式比對出的完整文本,這在避免重複輸入文本時很有用;

~:和搜尋模式中的~元字元意義類似,用來代表最後一個替換命令中的替換文本。這在重複編輯時很有用;

\u或\l:使替換字串中的下一個字元變成大寫或小寫;

\U或\L或\e或\E:\U或\L會使後面的所有字元都被轉化成大寫或小寫,直到出現\e或\E為止。

更多替換技巧:

:s:等同於 :s//~/,即會重複上一次替換;

:& : 也能重複上一個替換,可以把&想象成" 同樣的東西 ";

:~ :與:&命令類似,但是用來搜尋的模式是上一個出現的Regex,而不是上一個替換命令中使用的Regex。

除了使用 / 字元作為替換命令中的分隔字元,還可以使用任何非字母,非數值,非空格的字元,但是反斜線,雙引號,和豎線除外,這在對路徑字串做替換時非常有用。

本章vi命令總結:

:s/old/new,g選項,c選項,:g,
搜尋模式中的特殊字元 ., *, ^, $, [], \(\), \<, \>, ~,
替換模式中的特殊字元 \n,\, &,~, \u, \l,\U,\L, \e,\E,
:s, :&, :~。


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.