创建一个名为test的文件,其中包含以下内容:

0123456789abcdef0123456789abcdef

我想使用xxd删除第一个0。用vim -b test打开它,然后在vim中运行:%!xxd。结果是:
0000000: 3031 3233 3435 3637 3839 6162 6364 6566  0123456789abcdef
0000010: 3031 3233 3435 3637 3839 6162 6364 6566  0123456789abcdef
0000020: 0a                                       .

然后,我删除第一个30的十六进制代码0:
0000000: 31 3233 3435 3637 3839 6162 6364 6566  0123456789abcdef
0000010: 3031 3233 3435 3637 3839 6162 6364 6566  0123456789abcdef
0000020: 0a                                       .

然后,我运行:%!xxd -r来读回十六进制。结果是:
^@23456789abcdef^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@

结果是乱码。我知道原因是上述内容不是有效的xxd输入。如果我删除行号和文本部分:
31 3233 3435 3637 3839 6162 6364 6566
3031 3233 3435 3637 3839 6162 6364 6566
0a

我运行:%!xxd -r -p读回十六进制。结果是正确的:
123456789abcdef0123456789abcdef

使用vim和xxd是否有更好的方法来完成这项工作?更好的方法意味着减少对xxd -r进行有效输入的编辑。

最佳答案

您自己发现,删除字节偏移量列和文本列使您可以使用:%!xxd -r -p获得所需的内容。那么,如何创建一个自定义命令来删除这些列,然后进行转换呢?无论如何,:%!xxd -r -p太多了。

就像是:

:command MyXXDR %s#^[^:]*: \(\%(\x\+ \)\+\) .*#\1# | %!xxd -r -p

如果您在编辑时过多地弄乱了文件格式(例如,替代命令与删除所需文本不匹配),则此确切命令可能会导致问题,但是您可以理解。

关于vim - 删除字节时,如何在vim中为 "xxd -r"输入有效的信息?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27086771/

10-11 06:45