/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 等中的换行符,因此您可能需要使用它。当然,或者您喜欢的任何字符串。希望有帮助!