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)