学习vi和vim编辑器(8):全局替换(1)

本章学习vi编辑器中的全局替换命令。通过全局替换命令,可以自动替换文件中所有出现过的某个单词。全局替换一般会用到两个ex命令:":g"(global),":s"(substitute)。

替换命令:

替换命令的语法如下: " :s/old/new/ ",该命令会将当前这一行中第一个出现的old模式替换为new。其中斜线用来分隔命令的各部分(如果斜线位于该命令的最后一个字符,则该斜线可以省略)。

" :s/old/new/g "会将当前这一行中的所有old模式替换为new。在s前面加上行地址,就可以指定替换命令将会影响的行范围。例如 : " %s/old/new/g "就能将文件中所有的old模式替换为new,如下图所示:该命令将文件中的所有line替换为file。


而以下命令只会将文件所有行中的第一个line替换为file:


确认替换:

在使用搜索和替换命令时,应该非常小心。可以在替换命令的结尾加上c选项(代表confirm),从而在每一次替换之前进行确认,如下图所示:



此时输入y(代表"yes")即可对当前匹配的到的字符串进行替换,而输入n则不进行替换。

与上下文有关的替换:

有时,需要搜索一个模式,当找到包含该模式的某个行时,将该行中的另一个字符串进行替换。即搜索模式并不是需要被替换的字符串。此时可以通过如下命令实现 " :g/pattern/s/old/new/g "。其中第一个g代表对文件中的所有行起作用,而最后一个g代表将每行中的所有old都替换为new(如果没有这个g,则只会对每一行中的第一个old进行替换),patten即为搜索模式。

如下图所示:该命令将搜索所有包含" Line "模式的行,并将该行中的 "this "字符串替换为" that "。


当用于搜索的模式和用于替换的模式一样时,就没有必要重复输入了。此时可以简写为 " :g/string/s//new/g ",该命令和 ":%s/string/new/g"命令效果一样。

模式匹配的规则:

除了可以搜索常量字符串,vi编辑器还可以搜索可变的模式,即正则表达式。正则表达式是一种将普通字符和特殊的元字符结合起来的表达式。

用在搜索模式中的元字符:

. (点号):匹配任何一个单一字符(除换行符外);

* :匹配0到无穷多个前一个字符,因此  .* 即可匹配出任何数量的任何字符;

^:当^出现在正则表达式的开头时,代表后面的正则表达式内容必须出现在一行的开头。如果^不是出现在正则表达式的开头,则没有特殊含义;

$:当$出现在正则表达式的结尾时,代表前面的正则表达式内容必须出现在一行的结尾。如果$不是出现在正则表达式的结尾时,则没有特殊含义;

\ : 相当于转义字符,将后面的特殊字符当成一般的字符。

[ ]:匹配出方括号里的任何一个字符。例如p[aeu]t 匹配中pat,pet,put。而且如果匹配目标为一个范围的字符,则可用第一个字符加上连字符,再加上最后一个字符来表示。例如,[A-Z] 匹配出A到Z之间的大写字母,[0-9]匹配出0到9内的任何数字。而且方括号内可以包含两个以上的范围,也可以混合使用范围和单个字符。插入符号^作为方括号内的第一个字符时,表示匹配出任何一个不在方括号中字符范围内的字符。

:会将 之间的模式保存到特殊的空间(称为保留缓冲区)。这种方法可以保存任何一行中的9个模式。

\< \>  会匹配出以某些字符开头(\<)或结尾(\>)的单词;

~:会匹配出上一次搜索时所使用的正则表达式。

POSIX方括号表达式:

方括号除了可以用于匹配出位于方括号内的任何一个字符,POSIX引进了另外的方法,用于比较非英文字母的字符。在POSIX标准中,方括号内的字符组称为“方括号表达式”。方括号表达式中,除了可以有文字字符,还可以包括其它元素:

字符类:POSIX字符类包括了用 [: 与 :] 括起来的关键字。

校对符号:校对符号是由多个字符组成的序列,但是必须被当成一个单位。并且使用 [. 与 .]括起所需字符。

等价类:等价类列出所有应该被当成相等的字符集合,用[=与=]括起来。

这三类都必须出现在方括号表达式中,例如 [[:alpha:]!] 匹配出任何一个字母字符或者感叹号。具体的POSIX字符类型可以参看《vi和vim编辑器》第六章:全局替换。

用在替换字符串中的元字符:

当做全局替换时,前面提到的具有特殊意义的元字符只能用在命令的搜索部分,即第一部分。而在替换字符串部分,这些元字符可能就失去了特殊意义。例如下图中的命令只会将A或B或C都替换为"[abc]",而不是相应的小写字母。


但是在替换字符串中,仍然存在一些具有特殊意义的元字符。

\n:利用 存储的第n个模式做文本替换;

\:和搜索模式中的 \ 字符含义相同,都是转义字符,使后面的一个特殊字符变为普通字符,从而失去特殊含义;

&:当用在替换字符中,&会被替换为搜索模式匹配出的完整文本,这在避免重复输入文本时很有用;

~:和搜索模式中的~元字符意义类似,用来代表最后一个替换命令中的替换文本。这在重复编辑时很有用;

\u或\l:使替换字符串中的下一个字符变成大写或小写;

\U或\L或\e或\E:\U或\L会使后面的所有字符都被转化成大写或小写的,直到出现\e或\E为止。

更多替换技巧:

:s:等同于 :s//~/,即会重复上一次替换;

:& : 也能重复上一个替换,可以把&想象成" 同样的东西 ";

:~ :与:&命令类似,但是用来搜索的模式是上一个出现的正则表达式,而不是上一个替换命令中使用的正则表达式。

除了使用 / 字符作为替换命令中的分隔符,还可以使用任何非字母,非数值,非空格的字符,但是反斜线,双引号,和竖线除外,这在对路径字符串做替换时非常有用。


本章vi命令总结:

:s/old/new,g选项,c选项,:g, 
搜索模式中的特殊字符  ., *, ^, $, [], , \<, \>, ~, 
替换模式中的特殊字符 \n,\, &,~, \u, \l,\U,\L, \e,\E,
:s, :&, :~。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/351779.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用DynamoDBMapper查询DynamoDB项目

在上一篇文章中&#xff0c;我们使用底层Java api在DynamoDB数据库上发出了查询。 使用DynamoDBMapper进行查询非常简单。 使用哈希键发出查询非常简单。 这样的查询的最佳候选者是通过使用电子邮件哈希键进行搜索的Users表。 public User getUser(String email) {User user…

实训二—博客三

学期末总结 经过了一个学期的java学习&#xff0c;使我对java产生了很大的兴趣&#xff0c;虽然我学的并不怎么好&#xff0c;但是我喜欢程序可以成功运行时带来的成就感&#xff0c;我也享受排错的过程。学加练的上课模式我觉得也很棒&#xff0c;给了我们独立思考编程的时间&…

小肚皮最新版本_小肚皮旧版本

00后最炙手可热的社交软件《小肚皮旧版本》等你下载天&#xff0c;在这里独特的社交玩法等你感受&#xff0c;为你带来有趣的玩法乐趣&#xff0c;小肚皮旧版本中丰富的乐趣玩法等你来感受&#xff0c;让你轻松享受到更多的乐趣所在&#xff0c;为你带来不一样的社交乐趣。特色…

小心使用STL中map的[]操作符

一个map就是一个&#xff08;关键码&#xff08;key&#xff09;&#xff0c;值&#xff08;value&#xff09;&#xff09;对偶的序列&#xff0c;它提供基于关键码的快速提取操作。也就是说&#xff0c;可以用下标运算符[]将关键码作为下标去执行查找&#xff0c;并返回对应的…

存图

转载于:https://www.cnblogs.com/simple-huang/p/10183360.html

地平线机器人_地平线机器人CEO余凯:基于深度学习的自动驾驶之路

请关注公众号“汽车创新港”&#xff0c;获取后续更多论坛实录&#xff01;加工作人员微信号&#xff1a;tinydanio&#xff0c;备注“我要入群”直接进入直播群&#xff01;今天都是大牛&#xff0c;下面的也是技术大牛&#xff0c;是百度深度学习实验室创始人&#xff0c;百度…

Mac os下android studio模拟器无法联网解决方法

步骤1: https://blog.csdn.net/qq_33945246/article/details/79908298 步骤2: 访达进入/Users/文件夹 步骤3: shiftcmmand.显示隐藏文件夹 步骤4 打开.android文件夹 点击adv文件夹进入&#xff0c;然后回到 "步骤1"查看解决方法 本人创业做的一款androidApp, 下载量…

matlab中表示拉普拉斯分布_深度优化局部拉普拉斯金字塔滤波器。

微信公众号&#xff1a;OpenCV学堂关注获取更多计算机视觉与深度学习知识觉得文章有用&#xff0c;请戳底部【好看】支持算法概述基于局部拉普拉斯金字塔的Edge-aware滤波器是在2011年由Adobe 公司的研究员Sylvain Paris(大神级人物&#xff0c;写了很多文章)提出的&#xff0c…

设计模式 命令模式 实例_根据您的命令-命令设计模式

设计模式 命令模式 实例命令设计模式是一种广为人知的设计模式&#xff0c;属于行为设计模式&#xff08;“四人帮”的一部分&#xff09;。 顾名思义&#xff0c;它与应用程序中的动作和事件有关。 问题陈述&#xff1a; 假设有一个网页将在其中包含多个菜单的情况。 编写此…

Linux(CentOS)挂载U盘、移动硬盘以及文件拷贝、备份

说明&#xff1a; 环境&#xff1a;VMware workstation 系统&#xff1a;centos6.2 以下操作均在root下执行的 1.U盘挂载 mkdir /mnt/usb //创建一个目录&#xff0c;用于挂载U盘 fdisk -l //查看系统中挂载的U盘&#xff0c;若系统有一块硬盘sdb1 代表你的U盘&#xff0c;…

iservice封装有哪些方法_5w大功率led白光灯珠参数,5w大功率led灯珠有哪些?

5w大功率led&#xff0c;5w大功率led白光灯珠参数&#xff0c;5w大功率led灯珠有哪些&#xff1f;5w大功率led&#xff0c;5w大功率led白光灯珠参数&#xff0c;5w大功率led灯珠有哪些&#xff1f;5w大功率led灯珠今天上午&#xff0c;一位台湾高雄的客户咨询定做5W大功率LED灯…

Java EE调度程序

Java EE应用程序服务器具有本机调度支持&#xff0c;并且在大多数应用程序中&#xff0c;不需要包括外部依赖项&#xff0c;例如著名的Quartz调度程序库。 Java EE 6和7完整配置文件中提供的Java EE 6计时器服务为我们提供了许多选项来定义调度间隔&#xff0c;以及如果停止并…

Simulink工作区无法保存To workspace模块的数据解决办法

1.首先要搞清楚Workspace概念。包括基本工作区&#xff08;base workspace&#xff09;和函数工作区。默认条件下在命令窗口中输入命令使用的是base workspace&#xff0c;但对于每个函数&#xff0c;都有自己独立的工作区。 2.GUI回调函数作为function有独立的工作区。 3.使…

对KVM虚拟机进行cpu pinning配置的方法

这篇文章主要介绍了对KVM虚拟机进行cpu pinning配置的方法,通过文中的各种virsh命令可进行操作,需要的朋友可以参考下首先需求了解基本的信息1 宿主机CPU特性查看 使用virsh nodeinfo可以看到一些基本信息 #virsh nodeinfo CPU model: x86_64 CPU(s): 32 CPU frequency: 1200 M…

1千条数据平均分配给15人_5项数据挂零!但5犯太吓人!CBA第1狠人场均干1人

昨天CBA常规赛第26轮&#xff1a;山东西王89-86北京首钢。上半场&#xff0c;双方打得非常激烈&#xff0c;比分交替领先。第3节北京抓住机会&#xff0c;顺势拉开比分(68-57)。李慕豪接方硕助攻&#xff0c;轻松扣篮得分。首钢替补席一片欢声笑语&#xff0c;方巨头和翟晓川笑…

redhat/centos 搭建svn服务器环境

subversion支持3种服务配置1、apache mod_dav_svn2、svnserve 3、穿越ssh隧道的svnserve教程选择的是最简单的svnserve的服务1、安装svnservyum install subversion2、建立一个仓库 respository$ mkdir /home/svn$ mkdir /home/code$ svnadmin create /home/svn/repository3、…

win10插入耳机没声音解决办法

之前重装了win10系统&#xff0c;装完系统后&#xff0c;发现插入耳机没有声音&#xff0c;非常令人难受&#xff01;经过一番探索&#xff0c;终于解决了这个问题&#xff0c;在此与大家分享。 1.点击左下角搜索框&#xff0c;输入控制面板&#xff0c;点击enter打开 2.打开…

js如何获取服务器端时间?

用js做时间校正&#xff0c;获取本机时间&#xff0c;是存在bug的。 使用js也可获取到服务器时间&#xff0c;原理是使用 ajax请求&#xff0c;返回的头部信息就含有服务器端的时间信息&#xff0c;获取到就可以了。以下&#xff1a; 1、依赖jQuery 代码&#xff1a; function …

java 堆转储快照_Java堆转储:您可以完成任务吗?

java 堆转储快照如果您像我一样对Java性能充满热情&#xff0c;那么堆转储分析对您来说应该不是一个谜。 如果是这样&#xff0c;那么好消息是您将有机会增加您的Java故障排除技能和JVM知识。 JVM现在已经发展到这样的程度&#xff1a;与旧的JDK 1.0 – JDK 1.4天相比&#xf…

电池供电的电容麦_太阳能航空障碍灯供电机制设计

南京徐航航空设备有限公司是以产销GPS航空障碍灯,led航空障碍灯,LED智能航空障碍灯,交流航空障碍灯,航空障碍灯品牌,智能型航空障碍灯,GPS航空障碍灯,led航空障碍灯,LED智能航空障碍灯,交流航空障碍灯,航空障碍灯品牌,智能型航空障碍灯等方面产品获得民航认证航空障碍灯品牌,是…