vim正則表達式


vim doc: usr_27.txt 查找命令及模式

一、使用正則表達式的命令[/,?, s, g]

實踐用法:
1, 模式塊作為替換的內容
1~多個#序列后面加上空格
:%s/\(#\+\)/\1 /g

1. 搜索命令

使用正則表達式的命令最常見的就是/, ?(搜索)命令。其格式如下:

/ 正則表達式, 向下搜索
?正則表達式,向上搜索
如:
/\d\d:\d\d:\d\d " 查找如 17:37:01 格式的時間字符串

2. 替換命令s

命令的完整形式: [range]s/from/to/[flags]
把from指定的字符串替換成to指定的字符串,from可以是正則表達式。

[range]的取值列表:

符號 說明
不寫range 默認為光標所在的行。
% 所有行(與 1,$ 等價)
. 光標所在的行。
1 第一行。
$ 最后一行。
33 第33行。
'a 標記a所在的行(之前要使用ma做過標記)。
.+1 當前光標所在行的下面一行。
$-1 倒數第二行。(這里說明我們可以對某一行加減某個數值來取得相對的行)。
22,33 第22~33行。
.,$ 當前行 到 最后一行。
'a,'b 標記a所在的行 到 標記b所在的行。
    注意,上面的所有用於range的表示方法都可以通過 +、- 操作來設置相對偏移量。

[flags]
這里可用的flags有:

符號 說明
只對指定范圍內的第一個匹配項進行替換。
g 對指定范圍內的所有匹配項進行替換。
c 在替換前請求用戶確認。
e 忽略執行過程中的錯誤。

查看匹配yes單詞的數量:

:%s/yes//gn
注意:上面的所有flags都可以組合起來使用,比如 gc 表示對指定范圍內的
所有匹配項進行替換,並且在每一次替換之前都會請用戶確認。

例如對全文替換,且替換前請求確認
:%s/from/to/gc
將所有的four替換成4,但是fourteen中的four不替換
:s/\<four\>/4/g
:%s/ */ /g 把一個或者多個空格替換為一個空格。
:%s/ *$// 去掉行尾的所有空格。
:%s/^/ / 在每一行頭上加入一個空格。

3. global 命令形式

global命令格式 : [range]global/{pattern}/{command}
global命令在[range]指定的文本范圍內(缺省為整個文件)查找{pattern}可以是正則表達式,
然后對匹配到的行執行命令{command},如果希望對沒匹配上的行執行命令,則使用global!或vglobal命令。

一些例子:

1) 刪除包含某字段(例如aaa)的行

:g/aaa/d

2) 刪除不包含某字段(例如aaa)的行

:g!/aaa/d

3) 刪除指定的行

:x,.d #從x行刪除到當前行;
:.,xd #從當前行刪除到x行;

4) 刪除只有空白的行

:g/^\s*$/d

二、正則表達式的用法

表示位置的符號

元字符 說明
$ 匹配行尾
^ 匹配行首
< 匹配單詞詞首
> 匹配單詞詞尾

表示數量的元字符

元字符 說明
* 匹配0到任意個
+ 匹配1到任意個
? 匹配0或1個
{n,m} 匹配n-m個
{n} 匹配n個
{n,} 匹配n-任意個
{,m} 匹配0-m個

元字符一覽

元字符 說明
. 匹配任意一個字符
[abc] 匹配方括號中的任意一個字符。可以使用-表示字符范圍,
[a-z0-9] 匹 配小寫字母和阿拉伯數字。
[^abc] 在方括號內開頭使用^符號,表示匹配除方括號中字符之外的任意字符。
\d 匹配阿拉伯數字,等同於[0-9]。
\D 匹配阿拉伯數字之外的任意字符,等同於[^0-9]。
\x 匹配十六進制數字,等同於[0-9A-Fa-f]。
\X 匹配十六進制數字之外的任意字符,等同於[^0-9A-Fa-f]。
\w 匹配單詞字母,等同於[0-9A-Za-z_]。
\W 匹配單詞字母之外的任意字符,等同於[^0-9A-Za-z_]。
\t 匹配 字符。
\s 匹配空白字符,等同於[ \t],或[ ]。
\S 匹配非空白字符,等同於[^ \t]。

另外,如果要查找字符 *、.、/等,它們不在方括號之內時,則需要在前面用 \ 符號,表示這不是元字符,而只是普通字符而已。

元字符 說明
* 匹配 * 字符。
. 匹配 . 字符。
/ 匹配 / 字符。
\ 匹配 \ 字符。
[ 匹配 [ 字符。

方括號內的特殊字符

鍵盤上的特殊字符放到方括號中基本都能直接匹配
[!@#$%^&*()_+-=[]\{}|:";'<>?,./~]

例外的情況需要加\的有 -,\.
中划線如果與數字,字母,空格相鄰時,又希望它匹配文中的-,就加轉意字符
有些情況反斜杠也要加,為了通用性考慮,如果為了匹配 - \ 就使用 [ \- \\]

方括號的用法:

方括號后加* 或+ 匹配任意多個 或 1個以上括號內的任意字符
例如 [a-zA-Z0-9]* 匹配任意多個字母數字組成的字符串。

ref
https://www.cnblogs.com/PegasusWang/p/3153300.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM