![](/img/trans.png)
[英]When piping to xxd, why is some text passed through without modification?
[英]Why does xxd add chars?
我正在尝试从没有hexdump
或base64
工具的系统中撤消od
命令。
我这样做是这样的(当然,实际上,编码是在“小型”系统上进行的,解码是在我的工作站上完成的,但是要进行测试,我首先尝试在一行中进行整体测试):
echo TEST | od -tx1 | xxd -r
当然,例如, echo TEST
只是一个占位符。 cat test.bmp
或其他任何东西。
> echo TEST
TEST
> echo TEST | od -tx1
0000000 54 45 53 54 0a
0000005
> echo TEST | od -tx1 | xxd -r
TEST
看起来不错,但这是不同的,因为如果再次将其赋予od
,我们可以在这里看到:
> echo TEST | od -tx1 | xxd -r | od -tx1
0000000 54 45 53 54 0a 00 00 00
0000010
为什么xxd -r
将那00
秒相加?
由于xxd -r
尝试并且无法解析格式与期望格式不同的输入,因此得到了这三个nul字节。 od -tx1
添加了一个带偏移但没有数据字节的额外行。 加上xxd
的偏移量在它们之后有一个冒号,并以不同的宽度打印,并且显示了可打印的字节以及十六进制转储,并且可能在不同的基数中…… xxd
不能很好地解决这一问题,并因此增加了多余的字节。
例子:
$ echo TEST | xxd
00000000: 5445 5354 0a TEST.
$ echo TEST | xxd | xxd -r
TEST
$ echo TEST | xxd | xxd -r | xxd
00000000: 5445 5354 0a TEST.
$ echo TEST | xxd | xxd -r | od -tx1
0000000 54 45 53 54 0a
0000005
$ echo TEST | od -tx1 | head -1 | xxd -r | od -tx1
0000000 54 45 53 54 0a
0000005
看看给xxd -r
预期的xxd
样式输入时它们不存在吗? 当您从od
的输出中od
多余的行时,它们又如何不存在? 不要混合和匹配不兼容的数据格式。
如果我完全删除偏移量,它似乎可以工作:
> echo TEST | od -tx1 -An
54 45 53 54 0a
> echo TEST | od -tx1 -An | xxd -r -p
TEST
> echo TEST | od -tx1 -An | xxd -r -p | od -tx1 -An
54 45 53 54 0a
答对了! 请注意字节前面的多余“”。 似乎没有作用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.