[英]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.