Vi 搜索范围并替换

Vi 搜索范围并替换

我在 Tru64 系统上使用,vi该系统不允许我使用这些\1方法。

这么简单的问题我找不到答案:

如何将搜索(范围)与替换连接起来?看起来像这样的东西,但它不起作用:

:/^group/s/\w$/Test/

对于那些感兴趣的人,我试图这样做\1

:%s/\(group\s\+\)\w/\1Test/

答案1

\w这里的主要问题是速记符号和的使用\s。如果编辑器是传统的的实现vi(Bill Joy 的原始来源),那么人们可能还想设置magic在大多数现代实现中默认设置的选项vi。这是用 完成的:set magic


vi不理解\wand\s以及像 dos 这样的各种字符类的类似简写符号vim

要在 中进行替换vi,请使用

:%s/^\(group[  ][  ]*\)[0-9A-Za-z_]/\1Test/

根据文档vim,\w对应[0-9A-Za-z_]and\s是空格或制表符(上面都有空格和制表符[ ])。

模式E+,其中E是一些表达式,可以被替换EE*

\1替换的替换部分中的 应该在( viany vi) 中工作。如果没有,请尝试nvi(“new vi”)或查看是否能够安装vim.

原始版本(至少在某些 BSD 系统上vi打包)需要对其“特殊字符”(除了和)进行转义,例如和等。或者,您可以设置选项(这通常是现代实现中的默认设置)。traditional-vi^$\*\.magic:set magicvi

上述替换将替换所有出现的(例如)

group 1

group Test

做你尝试过的同样事情的另一种方法:

:g/^group/s/[0-9A-Za-z_]$/Test/

要不就

:g/^group/s/.$/Test/

如果您不需要太小心该行的最后一个字符。

如果您想更换最后一个单词(不仅仅是最后一个字符)就行:

:g/^group/s/[^ ]*$/Test/

在传统的vi没有magic选项集的情况下,这可能必须写成

:g/^group/s/\[^ ]\*$/Test/

相关内容