胖爷的vim实用手册 搜索、替换以及正则表达式之特么精华篇

前面简单的介绍过搜索命令,这里简单的回顾一下。
一、搜索

快捷键         功能                       记忆方式
--------------------------------------------------------------
/search_string 从当前行向下查找“search_string”
?search_string 从当前行向上查找“search_string”
n 继续查找下一个“search_string”
N 继续查找上一个“search_string”
/serrch_string\c 忽略大小写
--------------------------------------------------------------

前面也简单的介绍过,命令模式下使用大小写的:r,s的替换功能,
这里也就不在赘述了。

二、范围

下面详细介绍下,命令行模式下的搜索和替换功能。
说道搜索和替换,那么不可回避的,就是”范围“的概念。
所谓范围,在命令行中,常以,分隔,比如3,7 那么表示
下面跟着的操作,只针对第三行至第七行之间的文本。
怎么看行号,前面说过:set no,显示所有行号,或者ctrl+g,现实当前
行号,这里也是回顾一下。
下面列出常用的范围描述:

命令        功能            记忆方式
--------------------------------------------------------------
:n,m        从n行至m行
:.        当前行
:$        最后行
:'c        标记为c的行
:g/pattern/    所有匹配pattern的行
--------------------------------------------------------------

三、替换
下面说一下替换功能,:s命令可以完成搜索以及替换功能,替换命令
通常需要限定文本范围或者跟随:g命令,下面列出常用的替换命令。

命令        功能            记忆方式
--------------------------------------------------------------
:s/p/q/g    搜索模式p,并全部替换为q
:s/p/q/        搜索模式p,并将首次出现p替换为q
:s/p/q/c    搜索模式p,并确认是否替换为q
:s/p/q/g    将当前行所有p用q代替
:n,ms/p/q/g    将n行至m行之间的内容p用q代替
:g/p/s//q/g    将文件中所有p用q代替
--------------------------------------------------------------

四、crlf的来历
下面说一个有趣的小知识,关于回车换行符的。
DOS, Mac 和Unix格式的文件各有不同,
回想计算机的史前史,那时的打字机使用两个字符来开始一个新行。
首先是一个字符命令使打印头移回开始位置(回车,<CR>),然后另一个字
符命令控制向前进纸一行(进纸,<LF>).
在计算机诞生之初,存储设备十分昂贵。于是有人就提出没有必要
用两个字符来表示一行的结束。UNIX一族决定只用进纸一个字符<Line
Feed>来表示行尾。来自苹果阵营的人则把回车<CR>作为换行的标
准。MS-DOS(和微软的Windows)仍然决定沿用古老的回车换行<CR><LF>传
统。
这样就导致了,三种不同的古怪标准,写vb程序,常用到的一个vbcrlf常量,
就是这么来的。

dos        unix        mac
------------------------------------------------------------
<CR><LF>    <LF>        <CR>
------------------------------------------------------------

所以,如果把dos下编辑的文本拿到unix下用vim打开,就会在每一行的行尾,
出现一个^M的标记,当然,可以用tr命令行,或者dos2unix命令直接转换,
但是应用上面说到的vim搜索和替换命令,也可以做到。
具体怎么做,爷懒得试了,谢谢。

五、正则表达式

正则表达式,伟光正的描述,是一种用来描述文本模式的特殊语法。
土点的说法,就是一种牛逼立体的匹配字符串的语法,
也可以用来区分普通程序猿和文艺程序猿。
曾经专门买了一本专门讨论这个主题的书来看,结果是头昏脑胀。
用了一段时间,发现其实,真是很简单的东西,
只要记住下面的这些内容,就会玩转正则表达式,当然,
熟能生巧是必须的。

这个玩意儿,在c井中偶尔会用到,
但是在linux世界中则是无处不在。
譬如:find grep awk sed sort uniq cut等等命令。
vim中,也是经常用来搜索匹配替换字符串,
不会的时候,往往遇到一些稍微复杂的匹配条件,
就只能干瞪眼了,可学会了以后,那真是受益无穷,终生无憾。
实在是居家旅行、杀人放火的无上利器呀~~~~~哦也~~~~

要说练会正则表达式,精髓中的精髓,就是记住一点:
所谓正则表达式,无非就是普通字符,以及特殊字符(也叫元字符/,*,?)
的排列组合而已,所以牢记那些是元字符及其含义,就是重中之重,
当然其他的就是普通字符。

正则表达式,一句话表述清楚,就是使用元字符与普通字符的排列组合
形成的字符串,表示出你要匹配的内容。。。哦,说清楚了么。。。

基本元字符及其含义

字符         含义
------------------------------------------------------------
^    只匹配行首
$    只匹配行尾
|    x|y匹配 x 或 y。例如,'z|food' 能匹配 "z" 或 "food"。
    '(z|f)ood' 则匹配 "zood" 或 "food"。
\<,\>    匹配词首和词尾
\(...\)    正则表达式分组
*    匹配0个或多个字符
[]    只匹配[]内字符。可以使一个单字符,也可以是字符序列。
    可以使用-表示[]内字符序列范围,如[1-5]=[12345]
[^pattern]    当"^"符号当直接靠着"[",意指否定或不匹配括号"[]"里内容
{}    匹配括号内的字符串,用,分隔,譬如:{abc,bcd},
\    屏蔽一个元字符的特殊含义,既然有了元字符,那么\就非常重要。
.    只匹配任意单字符
pattern\{n\}    只用来匹配前面pattern出现的次数。n为次数。
pattern\{n\}    含义同上,但次数最少为n。
pattern\{n,m\}    含义同上,但pattern出现次数在n与m之间。
------------------------------------------------------------
上面了列出的只是常用的方式,记住了这些,估计99%的应用都可以满足了。

学些正则表达式,第一牢记元字符以及语法,第二多看几个例子,无他。
例子以后有时间会慢慢累加,下面列两个常用的匹配
ip地址以及日期的正则表达式实例:

匹配ip地址:
[0-9]\{3\}\.[0-9]\{3\}\.[0-9]\{3\}\.[0-9]\{3\}
匹配日期,日期格式dd-mm-yyyy
[0-9]\{2\}-[0-9]\{2\}-[0-9]\{4\}               

现在看起来,简单吧,无非是元字符、普通字符组合而已,
需要保持元字符原有含义的,就用转义符标记。

还有一类蛋疼的正则表达式类,列出来供参考,
我觉得没什么用,在这里介绍,只是为了以后玩意见到,
有什么文艺程序猿这样写,不会看不懂而已。

类        等价的正则表达式
--------------------------------------------------
[[:upper:]]         [A-Z]           
[[:alnum:]]         [0-9a-zA-Z]
[[:lower:]]         [a-z]            
[[:space:]]        空格或tab键     
[[:digit:]]           [0-9]          
[[:alpha:]]         [a-zA-Z]
--------------------------------------------------

好了,就到这里,到这里吧。。。

转载于:https://www.cnblogs.com/jinshoucai/archive/2011/11/09/2242436.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值