Lan*_*rts 2 vi regular-expression
我在vi
不允许我使用这些\1
方法的 Tru64 系统上使用。
这么简单的问题我找不到答案:
您如何将搜索(范围)与替换连接起来?看起来像这样的东西,但它不起作用:
:/^group/s/\w$/Test/
Run Code Online (Sandbox Code Playgroud)
对于那些感兴趣的人,我试图用以下方法做到这一点\1
:
:%s/\(group\s\+\)\w/\1Test/
Run Code Online (Sandbox Code Playgroud)
这里的主要问题是速记符号\w
和\s
. 如果编辑器是(Bill Joy 的原始来源)的传统实现vi
,那么您可能还想设置magic
在大多数现代实现中默认设置的选项vi
。这是通过:set magic
.
vi
不理解\w
和\s
类似的各种字符类的速记符号vim
。
要在 中进行替换vi
,请使用
:%s/^\(group[ ][ ]*\)[0-9A-Za-z_]/\1Test/
Run Code Online (Sandbox Code Playgroud)
根据该vim
文档,\w
对应于[0-9A-Za-z_]
和\s
是空格或标签(有一个空间,并在这两个选项卡[ ]
上方)。
的E+
图案,其中E
一些表达,可以通过更换EE*
。
的\1
在所述取代的替换部分应该是工作在vi
(任意vi
)。如果没有,请尝试nvi
("new vi
") 或查看您是否能够安装vim
.
原vi
(打包为traditional-vi
至少一些BSD系统上)需要有其“特殊字符”(除了^
和$
)逃跑了,就像\*
和\.
等。或者,你可以通过设置magic
与选项:set magic
(这通常是在现代的默认vi
实现)。
上述替换将替换所有出现的(例如)
group 1
Run Code Online (Sandbox Code Playgroud)
和
group Test
Run Code Online (Sandbox Code Playgroud)
做你尝试过的同样事情的另一种方式:
:g/^group/s/[0-9A-Za-z_]$/Test/
Run Code Online (Sandbox Code Playgroud)
要不就
:g/^group/s/.$/Test/
Run Code Online (Sandbox Code Playgroud)
如果你不需要太小心行上的最后一个字符。
如果您想替换该行的最后一个单词(不仅仅是最后一个字符):
:g/^group/s/[^ ]*$/Test/
Run Code Online (Sandbox Code Playgroud)
在vi
没有设置magic
选项的传统中,这可能要写
:g/^group/s/\[^ ]\*$/Test/
Run Code Online (Sandbox Code Playgroud)