您的位置:首页 > 运维架构 > Linux

Linux中Vim,Vi文本编辑器中的文本查找和替换

2016-09-22 00:00 204 查看
最近在工作中需要在Linux机器上写一些shell脚本部署项目,其中写脚本需要对字符文本的操作,这当中就需要用到Vim/Vi文本编辑器(Vim是Vi的增强,会比Vi功能更强大一些)。自己在做的时候也参考了其他很多的文章和教程,下面的内容是翻译加上整理的后的内容,原文地址为http://go2linux.garron.me/linux/2011/02/vim-search-and-replace-tips-902/。希望自己能够记录一下,方便以后复习,同时也希望能够对学习linux的同学给予一些帮助。

这里主要记录一下Vim中的文本查找和替换。

一、查找

如果只需要查找文档中出现的单词,可以按如下语法(word为需要查找的单词):

:/word

如果需要查找下一个出现的word,只需要输入如下:

:/

另外查找是可以使用通配符的,如下是常用的几种通配符:

^ (caret)匹配一行的开始

$ (dollar sign)匹配一行的结束

\s (white spaces)匹配空格

\S (non-white spaces)匹配非空格

\d (digit)匹配数字

\D (non-digit)匹配非数字

\u (uppercase)匹配大写字母

\l (lowercase)匹配小写字母

假如你想查找所有以字母a开头的行,你可以这样用:

:/^a

或者你想匹配所有以a结尾的行,你可以这样用:

:/a$

下面是匹配特殊字符的例子,假如你在编辑html文档时,你不想文档中出现以“>”开始和“<”结束的行,你可以这样查找:

:/^>



:/<$

二、查找和替换

1)只查找和替换当前行

:s/old-words/new-words

Vim会在光标所在的当前行查找old-words,如果找到则将其替换成new-words

2)查找和替换指定的多行

假如你只想在5到20行查找old-words,然后替换成new-words

:5,20s/old-words/new-words

同样的,如果你想从第5行到文件末尾进行查找和替换($符号用作匹配文件最后一行)

:5,$s/old-words/new-words

或者你也可以这么用,匹配当前行到指定的行20行(.用作匹配当前行)

:.,20s/old-words/new-words

假如你想匹配整个文档所有行

:1,$s/old-words/new-words

上面这个表达式有一个更短的写法,可以达到同样的后果(%代表“1,$”的别名)

:%s/old-words/new-words

同样你也可以使用+、-符号来向上和向下指定行数(相对于当前行而言)查找和替换

:-2,+4s/old-words/new-words

上面的例子会在当前行的上面2行和下面4行范围内查找

同理,你也可以像下面这样使用来查找和替换当前行的上面5行到文档结束

:-5,$s/old-words/new-words

或者查找和替换当前行到下面10行

:.,+10s/old-words/new-words

三、Global和Confirmation修饰符

如果你想要作用于所有行,你可以用g(g代表global)修饰符,如果你想要替换的时候提示你确认,使用c(c代表confirmation)修饰符,下面的例子是搜索和替换整个文档,并且会提示你确认

:%s/old-words/new-words/gc

四、Vim查找和替换的小贴士和技巧

假如你像下面这样用:

:%s/old/new/gc

这样会替换old old2 111old222为new new2 111new222,但是有时候我们只是想要精确的替换new这个单词,而不是所有包含old的都替换为new。然而你可以这样用:

:%s/\<old\>/new/gc

倘若你还要大小写不敏感的话

:%s/\<old\>/new/gci

相反,你要大小写敏感的话(默认是大小写敏感)

:%s/\<old\>/new/gcI

五、最后几个常用的匹配、删除的例子

1)删除1到10行的所有精确匹配到的单词old

:1,10s/\<old\>//

2) 删除1到10行出现的old和后面的n个字符,其中n为正整数

:1,10s/\<old\>.\{n}//

3)删除1到10行old后面的所有单词

:1,10s/\<old\>\zs.*//

4)删除1到10行old和old前面的所有内容

:1,10s/.*\<old\>//

5))删除1到10行old前面的所有单词

:1,10s/.*\ze\<old\>//
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Vim Vi Linux 查找 替换