选择:

选择:

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

java^@-jar^@/usr/lib/selenium/selenium-server-standalone.jar^@-port^@4444^@-trustAllSSLCertificates^@

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

:%s#^@# #g

但它说,pattern not found ^@

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

答案1

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

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

在 C 中,字符串以 NUL 字符终止,这些字符显示为^@

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

为了键入这些字符,您必须在它们前面加上Control-v来表示下一个字符。

例如在本例中:Control-v后跟Control- @

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

答案2

象征表示 NULL 字符,ASCII 值为 000。

你可以尝试:

:%s/\%x00/ /g

选择:

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

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

  • %s/<CTRL-SHIFT-2>/ /g(在苹果机上)

其中<CTRL-2>表示首先按下CTRLPC 上的 ,保持按下状态,点击2,松开CTRL

<CTRL-SHIFT-2>表示首先在 Mac 上按下control,保持按下状态,shift在 Mac 上按下,保持按下状态,点击2,松开control然后shift

最后,这两个命令都应该在%s/^@/ /g屏幕上显示结果。^@表示单个字符,后面不^@,因此您不能在上述命令中连续键入^and 。@

此命令将所有^@字符替换为空格。

(来源

答案3

好的,这是简单的解释,假设您不是计算机专家!在 vi 编辑器中(也可能在 vim 中,尽管我个人不使用它)按 Esc 退出插入模式,然后使用 /%x00 搜索 ^@ 字符,然后您可以删除每个字符(使用x 键)。使用 n(表示下一个)跳到下一个,然后 x 那个。如果您只有几个要删除,这会很方便,因为在第一次搜索(/%x00)之后,您可以执行 nxnxnx ... 直到将它们全部删除!当然,如果您有一个大文件,其中有大量要删除的文件,则需要执行“搜索和替换”操作。按 Esc 键(多次按不会造成任何损害)然后按 Shift-,确保您没有处于插入模式;以获得屏幕左下角的 : 提示。 (即按住 Shift 键的同时按 ; 键。)输入 1,$s/%x00//g(它将出现在 : 后面),然后按 Enter。 ^@字符将全部消失!您刚刚所做的是:对于此文件中的所有行(1,$ 位),只要您看到 ^@(%x00 位),请替换(s 位),而没有任何内容(// 位,您将注意两个正斜杠之间没有任何内容),并在每一行上根据需要多次执行此操作(g 位,其中 g 代表全局。)如果您不想删除字符而是替换每个字符,则这是相同的命令,但是将要替换的字符放在 // 之间。不要忘记 \n 是 unix 等中的换行符,因此您可能需要使用它。当然,或者您喜欢的任何字符串。希望有帮助!

相关内容