如何使用“vi 编辑器”替换单词?

如何使用“vi 编辑器”替换单词?

这里有一个名为employees.txt的示例文本文件。它包含员工的姓名、街道和城市。

我的问题是:如何将所有“维多利亚”城市实例替换为“维多利亚市”。只有城市受到影响,而不会影响维多利亚大道等地点或 Ashley Victoria 等人物?

我希望有一个人可以帮助我。

答案1

你可以告诉 vim 要求确认:

:%s/Victoria/City\sof\sVictoria/gc
  • %s 替换,g 全局执行,c 请求确认
  • \s 表示空格。

这可能是最快的,但确实需要一些手动工作。

如果只有这两个,那么这个也可以:

:%s/Victoria/City\sof\sVictoria/g
:%s/City\sof\sVictoria\sDrive/City\sof\sVictoria/g
:%s/Ashley\sCity\sof\sVictoria/Ashley\sVictoria/g

但如果还有更多,这个列表就会很长。在执行此操作之前,请务必进行备份 ;)

答案2

你似乎在问正则表达式环视断言

至少在vim我是已证明),您可以将其用于\@!负向前瞻和\@<!负向后瞻。例如,要Victoria匹配不是前面是Ashley(Ashley-space):

\(Ashley \)\@<!Victoria

而与之匹配Victoria的是不是接着是Drive(space-Drive):

Victoria\( Drive\)\@!

把它们放在一起:

 :s/\(Ashley \)\@<!Victoria\( Drive\)\@!/City of &/g

其中&RHS 反向替换匹配的Victoria。推广到 之前和之后的任何大写“单词” Victoria

:s/\([[:upper:]][[:alpha:]-]* \)\@<!Victoria\( [[:upper:]][[:alpha:]-]*\)\@!/City of &/g

也可以看看:

答案3

另一种方法:(手动)

搜索Victoria

/维多利亚

如果符合您的要求,请进入插入模式(i)然后输入City of

然后在命令模式下转到下一个查找(n),如果匹配,则点击点(.)它将City of再次插入,如果不匹配,则转到下一个查找等等......

相关内容