我在 Tru64 系统上使用,vi
该系统不允许我使用这些\1
方法。
这么简单的问题我找不到答案:
如何将搜索(范围)与替换连接起来?看起来像这样的东西,但它不起作用:
:/^group/s/\w$/Test/
对于那些感兴趣的人,我试图这样做\1
:
:%s/\(group\s\+\)\w/\1Test/
答案1
\w
这里的主要问题是速记符号和的使用\s
。如果编辑器是传统的的实现vi
(Bill Joy 的原始来源),那么人们可能还想设置magic
在大多数现代实现中默认设置的选项vi
。这是用 完成的:set magic
。
vi
不理解\w
and\s
以及像 dos 这样的各种字符类的类似简写符号vim
。
要在 中进行替换vi
,请使用
:%s/^\(group[ ][ ]*\)[0-9A-Za-z_]/\1Test/
根据文档vim
,\w
对应[0-9A-Za-z_]
and\s
是空格或制表符(上面都有空格和制表符[ ]
)。
模式E+
,其中E
是一些表达式,可以被替换EE*
。
\1
替换的替换部分中的 应该在( vi
any vi
) 中工作。如果没有,请尝试nvi
(“new vi
”)或查看是否能够安装vim
.
原始版本(至少在某些 BSD 系统上vi
打包)需要对其“特殊字符”(除了和)进行转义,例如和等。或者,您可以设置选项(这通常是现代实现中的默认设置)。traditional-vi
^
$
\*
\.
magic
:set magic
vi
上述替换将替换所有出现的(例如)
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/