我正在使用 CentOS,并且正在阅读有关编辑器中的替换命令 ,s///
的信息vi
。我想测试一些我看到的例子:
:%s/old/new/g Substitutes old with new throughout the file
:.,$s/old/new/g Substitutes old with new from the current cursor position to the end of the file
Run Code Online (Sandbox Code Playgroud)
上面的示例对我来说按预期工作,但以下包含插入符号 ( ^
) 的示例不起作用:
:^,.s/old/new/g Substitutes old with new from the beginning of the file to the current cursor position
Run Code Online (Sandbox Code Playgroud)
我试过了,但没有用,所以插入符号不起作用还是我输入的命令不正确?
Kus*_*nda 15
在vi
编辑器中,以及在ex
和ed
(如在 BSD 系统上找到的)中,^
地址前一行。这意味着,该命令^d
将删除以前的线,^m.
将交换与以前这条线,这^,.s/old/new/g
将替代匹配的所有字符串old
与new
上一行,并在这条线。
该vim
编辑器,可在伸展重新执行原vi
和ex
编辑,通常在Linux系统上的名字下安装vim
,vi
和ex
,没有解决前行的这种方式,并且将响应“ E492:不编辑命令”如果你尝试使用它。您可以使用-
或-1
代替:
-,.s/old/new/g
Run Code Online (Sandbox Code Playgroud)
使用-
或-1
代替^
也能在ed
,ex
并在vi
非GNU系统。
POSIX 标准对与编辑器相关的以下内容进行了说明ed
:
从历史上看,
ed
接受^
字符作为地址,在这种情况下,它与<hyphen-minus>
字符相同。POSIX.1-2017 不要求或禁止这种行为。
有一个类似的措辞为vi
与ex
编辑器(ex
是vi
“一致的编辑模式”):
从历史上看,
ex
并vi
接受该^
字符作为地址和命令的标志偏移量。在这两种情况下,它都与-
角色相同。POSIX.1-2017 不要求或禁止这种行为。
请注意,您似乎引用的文本表示^,.
从文件顶部到当前行的所有行。这是不正确的。它只处理前一行和当前行,并且只在vi
(andex
和 ed
) 的“历史准确”实现中这样做。要寻址从编辑缓冲区开头到当前行的所有行,请使用1,.
.
该^
-instead-OF-1
错字也可能是从思想来,“既然$
是结束线锚在正则表达式,并在编辑缓冲区中的最后一行的地址^
,被启动的行的锚因此,正则表达式必须(通过对称)是编辑缓冲区的第一行”。
只是提供另一个琐事:该^
地址也不能在ed
编辑器的 GNU 实现中使用。与 的任何其他实现一样ed
,-
或-1
仍可用作替代方案。