文档章节

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

E
 Eric-Zhang
发布于 2016/09/22 15:28
字数 1062
阅读 336
收藏 0

最近在工作中需要在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\>//

© 著作权归作者所有

E
粉丝 0
博文 2
码字总数 1723
作品 0
成都
程序员
私信 提问
vim 命令大全 / vi 命令大全

vim 命令作为linux系统下使用最多的文本编辑器,功能十分强大,里面包含了操作文本的各种命令。本文收集了在linux系统下的 最常用的 vim 命令大全 /vi 命令大全。 vim 命令大全 光标控制命令...

LEAN_IN
2015/01/27
406
0
51.vim

Vim简介: Vim的前身为vi(visual editor)编辑器,Vi编辑器是Linux和Unix上最基本的文本编辑器,工作在字符模式下。由于不需要图形界面,Vi是效率很高的文本编辑器。尽管在Linux上也有很多图...

闪电王
2018/01/07
0
0
如何安装和使用纯文本编辑器 vi/vim

这篇文章是系列教程的第二讲,在这个部分中,我们会介绍 vi/vim 基本的文件编辑操作,帮助读者理解编辑器中的三个模式,这是 LFCS 认证考试中必须掌握的 使用 vi/vim 执行基本的文件编辑操作...

linuxprobe
2016/10/13
18
0
(八)Linux学习笔记-Linux文本编辑器vim/vi

(八)Linux学习笔记-Linux文本编辑器vim/vi vim/vi介绍 vim/vi常用命令 以下为Red Hat系列Linux的命令集,我使用的Centos7.5版本。 vim/vi介绍 vim/vi是linux平台下常用的文本编辑工具,功能...

Super_RD
2018/12/20
0
0
CentOS6.4之文本编辑器Vi/Vim

Vim/Vi 简介 Vim/Vi是一个功能强大的全屏幕文本编辑器,是Linux/UNIX上最常用的文本编辑器,它的作用是建立、编辑、显示文本文件。 Vim/Vi 没有菜单,只有命令。 插入命令 定位命令 删除命令...

独钓渔
2013/07/13
225
1

没有更多内容

加载失败,请刷新页面

加载更多

mysql-connector-java升级到8.0后保存时间到数据库出现了时差

在一个新项目中用到了新版的mysql jdbc 驱动 <dependency>     <groupId>mysql</groupId>     <artifactId>mysql-connector-java</artifactId>     <version>8.0.18</version> ......

ValSong
今天
5
0
Spring Boot 如何部署到 Linux 中的服务

打包完成后的 Spring Boot 程序如何部署到 Linux 上的服务? 你可以参考官方的有关部署 Spring Boot 为 Linux 服务的文档。 文档链接如下: https://docs.ossez.com/spring-boot-docs/docs/r...

honeymoose
今天
6
0
Spring Boot 2 实战:使用 Spring Boot Admin 监控你的应用

1. 前言 生产上对 Web 应用 的监控是十分必要的。我们可以近乎实时来对应用的健康、性能等其他指标进行监控来及时应对一些突发情况。避免一些故障的发生。对于 Spring Boot 应用来说我们可以...

码农小胖哥
今天
10
0
ZetCode 教程翻译计划正式启动 | ApacheCN

原文:ZetCode 协议:CC BY-NC-SA 4.0 欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远。 ApacheCN 学习资源 贡献指南 本项目需要校对,欢迎大家提交 Pull Request。 ...

ApacheCN_飞龙
今天
5
0
CSS定位

CSS定位 relative相对定位 absolute绝对定位 fixed和sticky及zIndex relative相对定位 position特性:css position属性用于指定一个元素在文档中的定位方式。top、right、bottom、left属性则...

studywin
今天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部