作者|清洬
編輯|清洬
GVIM正則表達(dá)式
行文目錄
1 | 正則表達(dá)式介紹 |
2 | 基本命令 |
3 | 元字符 |
4 | 特殊字符 |
5 | 表示數(shù)量的元字符 |
6 | 表示位置的元字符 |
7 | 示例 |
01:正則表達(dá)式介紹
20世紀(jì)50年代,一位名叫Stephen Cole Kleene的美國數(shù)學(xué)家發(fā)表了規(guī)則的語言(regular language)的定義。規(guī)則的表達(dá)式就是用來描述規(guī)則的語言的表達(dá)式。后來發(fā)明UNIX的Ken Thompson借用這個(gè)概念并將它應(yīng)用到了文本編輯器中。后面正則表達(dá)式的說法進(jìn)入到了大家常用的vi、vim、gvim當(dāng)中。
正則表達(dá)式在gvim、perl以及sed等情況中都可以使用。它可以幫助我們完成以下幾類工作:
①確認(rèn)字符串是否匹配了某種模式
②把字符串中匹配了某種模式的內(nèi)容捕獲出來
③把字符串中匹配的內(nèi)容替換成指定的內(nèi)容
下面進(jìn)入正則表達(dá)式的世界中吧!掌握了它并能熟練運(yùn)用的話,能完成很多難以想象的工作的哦!
02:基本命令
/ 搜索命令(例如 /正則表達(dá)式)
/ab 即為搜索字母組合ab
:s 替換命令
:s/正則表達(dá)式/替換字符串/選項(xiàng)
03:元字符
. | 匹配任意一個(gè)字符 |
[abc] | 匹配方括號(hào)中的任意一個(gè)字符,可以使用-表示字符范圍。如[a-z0-9]匹配小寫字母和0-9數(shù)字 |
[^abc] | 在括號(hào)內(nèi)開頭使用^符號(hào),表示匹配除方括號(hào)中字符之外的任意字符 |
d | 匹配阿拉伯?dāng)?shù)字,等同于[0-9] |
D | 匹配阿拉伯?dāng)?shù)字之外的任意字符,等同于[^0-9] |
x | 匹配十六進(jìn)制數(shù)字,等同于[0-9A-Fa-f] |
X | 匹配十六進(jìn)制以外的任意字符,等同于[^0-9A-Fa-f] |
w | 匹配單詞字母,等同于[0-9A-Za-z_] |
W | 匹配單詞字母之外的任意字符,等同于[^0-9A-Za-z_] |
匹配 |
|
s | 匹配空白字符,等同于[ ] |
S | 匹配非空白字符,等同于[^ ] |
匹配回車符 |
04:特殊字符
* | 匹配 * 字符 |
. | 匹配 . 字符(注意與.的區(qū)別) |
/ | 匹配 / 字符 |
\ | 匹配 字符 |
[ | 匹配 [ 字符 |
05:表示數(shù)量的元字符
* | 匹配 0-任意個(gè) |
+ | 匹配 1-任意個(gè) |
? | 匹配 0-1個(gè) |
{n,m} | 匹配n-m個(gè) |
{n} | 匹配 n個(gè) |
{n,} | 匹配 n-任意個(gè) |
{,m} | 匹配 0-m個(gè) |
06:表示位置的元字符
$ | 匹配 行尾 |
^ | 匹配 行首(區(qū)分[^abc],這個(gè)hat符號(hào)是在方括號(hào)里面) |
< | 匹配 單詞詞首 |
> | 匹配 單詞詞尾 |
07:示例
①:%s/[Aa]sic/ASIC/g
把所有單詞asic或者Asic都替換為ASIC。如圖
注意使用該命令后,只有第一行發(fā)生了變化。因?yàn)橹挥械谝恍蟹掀ヅ錀l件[Aa]sic。所以只有第一行被替換成了ASIC。
命令解讀:%s(substitute)為全局替換;[Aa]sic為匹配的內(nèi)容;ASIC為替換的內(nèi)容;g為global。
②:%s/ +/ /g
使用單個(gè)空格替換一個(gè)或多個(gè)空格。如下圖
使用命令后第一行的3個(gè)空格和第二行的2個(gè)空格均被1個(gè)空格所取代。
命令解讀:%s為全局替換;“︺+"為匹配1個(gè)或多個(gè)空格;‘︺’為替換的內(nèi)容。g為global。︺代表空格。
③:[range]global/{pattern}/{command}
global命令在[range]指定的文本范圍內(nèi)(缺省時(shí)為整個(gè)文件)查找{pattern},然后匹配到的行執(zhí)行命令{command},如果希望對(duì)沒匹配上的執(zhí)行命令,則使用global!或vglobal命令。
④:g/^[ ]*$/d
刪除所有的空行(沒有任何字符,除了一個(gè)回車符),如圖所示。
命令使用后,所有只有一個(gè)換行符的行都被刪掉。注意如果使用:g/^[ ]$/d則達(dá)不到效果。
⑤:g/asic/d
刪除含有asic字符的行,如下圖
因?yàn)橹挥械谝恍杏衋sic,所以第一行被刪掉了。
⑥:%s/^ *//g
刪除每行的所有的前導(dǎo)空格,如下圖
每一行開頭的所有空格都會(huì)被刪掉。*表示匹配0-任意個(gè)數(shù)量。//表示不用內(nèi)容代替,即刪除的意思
⑦:%s/^/*/g
在文件中的每一行的開始插入*字符,如下圖
如果想在特定行插入的話,可以改成下面形式
:18,20s/^/*/g 即在18-20行的開頭插入*字符。
⑧:%s/^d.*$//g
刪除以數(shù)字開頭的行,如下圖
刪除效果,只保留了沒有數(shù)字開頭的后兩行。.*組合表示匹配任意多個(gè)任意字符。比較常用!
⑨:%s/^[a|b|c].*$//g
刪除以a或者b或者c開頭的行,如下圖
以a,b,c開頭的行被刪除掉。在區(qū)分大小寫的情況下。(set noic設(shè)置區(qū)分大小寫)
⒑:%s/^abc.*$//g
刪除以abc開頭的行,如下圖
這個(gè)命令只刪除了以abc開頭的行,區(qū)別于第9條命令。
⒒:%s/^(.*) 1$/1/g
將兩行重復(fù)行壓縮成一行,如下圖
命令解讀:從行首(^)開始,匹配任意字符(.*),然后匹配換行符( ),第二行匹配與括號(hào)內(nèi)內(nèi)容相同(1),到行尾($)。替換的內(nèi)容為括號(hào)((.*))內(nèi)的內(nèi)容。
12 :%s/^(.*)(n1)+$/1/g
將多行重復(fù)行壓縮成一行,如下圖
1代表紅色括號(hào)的內(nèi)容;如果有2則代表綠色括號(hào)中的內(nèi)容。
13.:%s/(.*):(.*)/2:1/g
交換列表中所有以:分割的字符的順序,如下圖
以上就是正則表達(dá)式使用的一些例子。可以嘗試其他功能的正則表達(dá)式,比如大小寫替換,查找特定形式的字符等等。
審核編輯:湯梓紅
-
字符
+關(guān)注
關(guān)注
0文章
234瀏覽量
25262 -
命令
+關(guān)注
關(guān)注
5文章
696瀏覽量
22109 -
Gvim
+關(guān)注
關(guān)注
0文章
8瀏覽量
2981 -
正則表達(dá)式
+關(guān)注
關(guān)注
0文章
27瀏覽量
3538
原文標(biāo)題:GVIM正則表達(dá)式
文章出處:【微信號(hào):集成電路設(shè)計(jì),微信公眾號(hào):集成電路設(shè)計(jì)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論