在vi中搜索和替换控制字符(^@、^M、^I....)

15 special-characters vi

我从/proc/some_proc_id/cmdline我的 ubuntu 机器中复制了这一行,

java^@-jar^@/usr/lib/selenium/selenium-server-standalone.jar^@-port^@4444^@-trustAllSSLCertificates^@
Run Code Online (Sandbox Code Playgroud)

不知何故,空格字符^@在 vi 中由 表示。我尝试使用命令将它们替换为空格字符,

:%s#^@# #g
Run Code Online (Sandbox Code Playgroud)

但它说,pattern not found ^@

如何替换特殊字符,尤其是那些以克拉符号开头的字符?

Cel*_*ada 20

不知何故,空格字符^@在 vi 中由 表示。

不是vi那样做的。尽管您在 shell 中键入命令行,参数之间有空格,但命令行实际上是内部离散的字符串序列,而不是一个以空格分隔的长字符串。在启动命令之前,shell 将命令行分隔为单独的参数字符串。

在 C 中,字符串以 NUL 字符结尾,这些字符显示为^@.

如何替换特殊字符,尤其是那些以克拉符号开头的字符?

为了输入这些字符,您必须在它们前面加上Control-v作为字面量的下一个字符。

例如在这种情况下:Control-v后跟Control- @

引入文字下一个字符的特殊字符通常是Control-v但它实际上是可配置的。键入stty -a以了解它的设置。lnext在输出中寻找。


eri*_*rik 6

符号表示 NULL 字符,ASCII 值为 000。

你可以试试:

:%s/\%x00/ /g
Run Code Online (Sandbox Code Playgroud)

选择:

在 @ 符号位于2键顶部的键盘上(感谢 Celada),您可以执行以下操作:

  • %s/<CTRL-2>/ /g (在电脑上)

  • %s/<CTRL-SHIFT-2>/ /g (在 Mac 上)

其中<CTRL-2>意味着首先按下CTRLPC 上的 ,保持按下,点击2,释放CTRL

<CTRL-SHIFT-2>表示首先按下controlMac 上的 ,保持按下状态,按下shiftMac 上的 ,保持按下状态,点击2,松开controlshift

最后,这两个命令都应该在%s/^@/ /g屏幕上显示。^@表示单个字符,^后面没有@,因此您不能在上面的命令中直接输入^@

此命令^@用空格字符替换所有的。

来源