日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

学习vi和vim编辑器(8):全局替换(1)

發(fā)布時(shí)間:2023/12/2 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 学习vi和vim编辑器(8):全局替换(1) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

本章學(xué)習(xí)vi編輯器中的全局替換命令。通過全局替換命令,可以自動(dòng)替換文件中所有出現(xiàn)過的某個(gè)單詞。全局替換一般會(huì)用到兩個(gè)ex命令:":g"(global),":s"(substitute)。

替換命令:

替換命令的語法如下: " :s/old/new/ ",該命令會(huì)將當(dāng)前這一行中第一個(gè)出現(xiàn)的old模式替換為new。其中斜線用來分隔命令的各部分(如果斜線位于該命令的最后一個(gè)字符,則該斜線可以省略)。

" :s/old/new/g "會(huì)將當(dāng)前這一行中的所有old模式替換為new。在s前面加上行地址,就可以指定替換命令將會(huì)影響的行范圍。例如 : " %s/old/new/g "就能將文件中所有的old模式替換為new,如下圖所示:該命令將文件中的所有l(wèi)ine替換為file。


而以下命令只會(huì)將文件所有行中的第一個(gè)line替換為file:


確認(rèn)替換:

在使用搜索和替換命令時(shí),應(yīng)該非常小心。可以在替換命令的結(jié)尾加上c選項(xiàng)(代表confirm),從而在每一次替換之前進(jìn)行確認(rèn),如下圖所示:



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

與上下文有關(guān)的替換:

有時(shí),需要搜索一個(gè)模式,當(dāng)找到包含該模式的某個(gè)行時(shí),將該行中的另一個(gè)字符串進(jìn)行替換。即搜索模式并不是需要被替換的字符串。此時(shí)可以通過如下命令實(shí)現(xiàn) " :g/pattern/s/old/new/g "。其中第一個(gè)g代表對文件中的所有行起作用,而最后一個(gè)g代表將每行中的所有old都替換為new(如果沒有這個(gè)g,則只會(huì)對每一行中的第一個(gè)old進(jìn)行替換),patten即為搜索模式。

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


當(dāng)用于搜索的模式和用于替換的模式一樣時(shí),就沒有必要重復(fù)輸入了。此時(shí)可以簡寫為 "?:g/string/s//new/g ",該命令和 ":%s/string/new/g"命令效果一樣。

模式匹配的規(guī)則:

除了可以搜索常量字符串,vi編輯器還可以搜索可變的模式,即正則表達(dá)式。正則表達(dá)式是一種將普通字符和特殊的元字符結(jié)合起來的表達(dá)式。

用在搜索模式中的元字符:

. (點(diǎn)號(hào)):匹配任何一個(gè)單一字符(除換行符外);

* :匹配0到無窮多個(gè)前一個(gè)字符,因此 ?.* 即可匹配出任何數(shù)量的任何字符;

^:當(dāng)^出現(xiàn)在正則表達(dá)式的開頭時(shí),代表后面的正則表達(dá)式內(nèi)容必須出現(xiàn)在一行的開頭。如果^不是出現(xiàn)在正則表達(dá)式的開頭,則沒有特殊含義;

$:當(dāng)$出現(xiàn)在正則表達(dá)式的結(jié)尾時(shí),代表前面的正則表達(dá)式內(nèi)容必須出現(xiàn)在一行的結(jié)尾。如果$不是出現(xiàn)在正則表達(dá)式的結(jié)尾時(shí),則沒有特殊含義;

\ : 相當(dāng)于轉(zhuǎn)義字符,將后面的特殊字符當(dāng)成一般的字符。

[ ]:匹配出方括號(hào)里的任何一個(gè)字符。例如p[aeu]t 匹配中pat,pet,put。而且如果匹配目標(biāo)為一個(gè)范圍的字符,則可用第一個(gè)字符加上連字符,再加上最后一個(gè)字符來表示。例如,[A-Z] 匹配出A到Z之間的大寫字母,[0-9]匹配出0到9內(nèi)的任何數(shù)字。而且方括號(hào)內(nèi)可以包含兩個(gè)以上的范圍,也可以混合使用范圍和單個(gè)字符。插入符號(hào)^作為方括號(hào)內(nèi)的第一個(gè)字符時(shí),表示匹配出任何一個(gè)不在方括號(hào)中字符范圍內(nèi)的字符。

:會(huì)將 之間的模式保存到特殊的空間(稱為保留緩沖區(qū))。這種方法可以保存任何一行中的9個(gè)模式。

\< \> ?會(huì)匹配出以某些字符開頭(\<)或結(jié)尾(\>)的單詞;

~:會(huì)匹配出上一次搜索時(shí)所使用的正則表達(dá)式。

POSIX方括號(hào)表達(dá)式:

方括號(hào)除了可以用于匹配出位于方括號(hào)內(nèi)的任何一個(gè)字符,POSIX引進(jìn)了另外的方法,用于比較非英文字母的字符。在POSIX標(biāo)準(zhǔn)中,方括號(hào)內(nèi)的字符組稱為“方括號(hào)表達(dá)式”。方括號(hào)表達(dá)式中,除了可以有文字字符,還可以包括其它元素:

字符類:POSIX字符類包括了用 [: 與 :] 括起來的關(guān)鍵字。

校對符號(hào):校對符號(hào)是由多個(gè)字符組成的序列,但是必須被當(dāng)成一個(gè)單位。并且使用 [. 與 .]括起所需字符。

等價(jià)類:等價(jià)類列出所有應(yīng)該被當(dāng)成相等的字符集合,用[=與=]括起來。

這三類都必須出現(xiàn)在方括號(hào)表達(dá)式中,例如 [[:alpha:]!] 匹配出任何一個(gè)字母字符或者感嘆號(hào)。具體的POSIX字符類型可以參看《vi和vim編輯器》第六章:全局替換。

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

當(dāng)做全局替換時(shí),前面提到的具有特殊意義的元字符只能用在命令的搜索部分,即第一部分。而在替換字符串部分,這些元字符可能就失去了特殊意義。例如下圖中的命令只會(huì)將A或B或C都替換為"[abc]",而不是相應(yīng)的小寫字母。


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

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

\:和搜索模式中的 \ 字符含義相同,都是轉(zhuǎn)義字符,使后面的一個(gè)特殊字符變?yōu)槠胀ㄗ址?#xff0c;從而失去特殊含義;

&:當(dāng)用在替換字符中,&會(huì)被替換為搜索模式匹配出的完整文本,這在避免重復(fù)輸入文本時(shí)很有用;

~:和搜索模式中的~元字符意義類似,用來代表最后一個(gè)替換命令中的替換文本。這在重復(fù)編輯時(shí)很有用;

\u或\l:使替換字符串中的下一個(gè)字符變成大寫或小寫;

\U或\L或\e或\E:\U或\L會(huì)使后面的所有字符都被轉(zhuǎn)化成大寫或小寫的,直到出現(xiàn)\e或\E為止。

更多替換技巧:

:s:等同于 :s//~/,即會(huì)重復(fù)上一次替換;

:& : 也能重復(fù)上一個(gè)替換,可以把&想象成" 同樣的東西 ";

:~ :與:&命令類似,但是用來搜索的模式是上一個(gè)出現(xiàn)的正則表達(dá)式,而不是上一個(gè)替換命令中使用的正則表達(dá)式。

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


本章vi命令總結(jié):

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

總結(jié)

以上是生活随笔為你收集整理的学习vi和vim编辑器(8):全局替换(1)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。