VIM中正则表达式的应用实例

实例1

:%s/^\d\{2,3\}/ \0/gc

全文替换,把行首有两位或3位数字的行缩进4个空格

例如

12,某某某

运行命令后会变为

12,某某某

解释:

% (替换范围)相当于1,$(整个文件)
^ 行首(在模式起始)
\d 十进制数位
\{n,m\} 匹配n至m个前面的匹配元
\0 替代为完整的匹配。“:%s/ <ul/test\0/gc”把所有“<ul”替换为“test<ul”。
c 确认每个替代
g 对行内所有的匹配进行替代。如果没有这个参数,替代只对每行的第一个匹配进行。

实例2

:%s/+*[A-Z]\+\d\{3\}\*/\t/gc

全文替换,把A123*,+B123*,+C123*,AZ567*,+AA123*,+BC123*等“以0个或数个+开头,紧跟1个或数个大写英文字母,再跟3个阿拉伯数字,最后跟一个*”的字符串替换为“\t”(tab)。

解释:

* 规定在它前面的项可以重复任意次(0~任意次)
\+ 表示前面一项可以被匹配一次或多次
\{n\} 匹配n个前面的匹配元
[A-Z] 匹配范围内所有大写字母

实例3

:%s*\d\@<=>*">*gc

全文替换,把1>、2>、3>、4>、……、10>、……等“数字>”的形式的字符串替换为1">、2">、3">、4">、……、10">、……等“数字">”的形式。

解释:

* 分隔符,相当于“:%s/abc/cba/gc”中的“/”
\d 十进制数位
\@<= 零宽度反向匹配。要求前面的匹配原紧贴在后面的模式之前匹配。“1\@<=>”匹配“1”之后的“>”。

实例4

:23,32s/3\(\.\d\)\@=/4/gc

把23~32行间所有3.1、3.2、3.3、3.4……中的3替换成4。替换后的结果是4.1、4.2、4.3、4.4……

解释:

\(\) 组成单个匹配元
\@= 零宽度匹配前面的匹配原。“3\.\@=”匹配“.”前面的“3”。

实例5

:%s#\_^\@<!\(</li>\)#</a>\0#gc

把所有不在行首的“</li>”替换为“</a></li>”
替换前:
</li>
<li><a href="linux_lvm_howto_6">6 参考文档</li>
<li><a href="linux_lvm_howto_7">7 后记</li>
</ul>
替换后:
</li>
<li><a href="linux_lvm_howto_6">6 参考文档</a></li>
<li><a href="linux_lvm_howto_7">7 后记</a></li>
</ul>

解释:

^ 行首(在模式起始)
\_^ 行首(用于任何地方)
\@<! 零宽度反向否匹配,要求前面的匹配原_不_紧贴在其后的模式之前匹配。“\(foo\)\@<!bar”匹配任何不在“foobar”中的“bar”。

实例6

:%s#>\@<!$#</a>#gc

给所有不以“>”结尾的行末尾添加“</a>”
替换前:
</li>
<li><a href="linux_lvm_howto_5">5 LVM应用实例
<ul style="list-style: none;">
<li><a href="linux_lvm_howto_5.1">5.1 在三个磁盘上创建LVM</a></li>
替换后:
</li>
<li><a href="linux_lvm_howto_5">5 LVM应用实例</a>
<ul style="list-style: none;">
<li><a href="linux_lvm_howto_5.1">5.1 在三个磁盘上创建LVM</a></li>

解释:

$ 行尾(在模式结尾)
\_$ 行尾(用于任何地方)

点击量:24

发表评论

电子邮件地址不会被公开。 必填项已用*标注

3 + 14 =