如何将"^@"替换为"\r"

3
我有一个包含某些函数、替换等的脚本。
但是在我的输出中,包含一些像^@这样的垃圾字符。
如何使用脚本将这个^@替换成换行符?
在vim命令行中执行此命令:%s/<CTRL-2>//g,但不能在脚本中执行。

如果你的脚本是 Vim 脚本,那么你可以像使用 Vim 命令行一样使用它。 - SolaWing
2个回答

4

^@代表ASCII码中的0。

你可以使用以下方式:

sed 's/\x00/\n/g'

E492: 不是编辑器命令:sed 's/\x00/\n/g' - Zam
你要求一个脚本。这不是vi命令! - cadrian
哦!有没有办法将这个包含到我的Vim脚本中? - Zam
没有想法。这不是同一个问题。 - cadrian

2

在vim中输入命令

如果您想修复结果,您可以在vim中执行以下操作:

:%s/

然后按下:

<Ctrl-V>010

接下来你的命令看起来是这样的::%s/^@

然后你可以继续输入:

:%s/^@/\r/g

但我认为更好的解决方案是修复生成这些字符的代码。

在脚本中

如果您想在脚本中执行此操作,可以使用函数:nr2char(),您可以执行nr2char(10)以获取^@


@sidyll,我不知道^@是从哪里来的,OP没有说。它可能来自外部命令(system()),也可能来自append()或者只是一个错误的子命令,例如:s/foo/\n/。因此,我认为目前没有必要使用append/system技巧。 - Kent
@SamjithDasan 不行,但你可以使用 :exec ... 并连接命令。 - Kent
@SamjithDasan:h :exe,有很多例子告诉你如何连接命令。 - Kent
没有想法!执行 "nr2char(10)" "\r" 失败了。 - Zam
@SamjithDasan nr2char()函数给你返回了^@,你可以自己决定如何处理它。你可以调用substitute()函数,也可以连接:s/../../命令... 如果你写了:exec "nr2char(10)",那么你可能没有读懂或理解帮助文档。不管怎样,这个问题已经被标记为重复问题,请查看重复的问题和答案以获取帮助。 - Kent
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接