2011-11-09 93 views
0

首先,我提什麼發生在我的Linux薄荷/ Ubuntu系統上不同的輸出...hexdump都和XXD產生在Red Hat和Ubuntu /薄荷

[email protected] ~/ah $ xxd -r -p input.txt output.txt 

[email protected] ~/ah $ cat input.txt 
60 00 00 00 00 14 06 20 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 02 00 15 00 15 7A 32 B1 08 
00 00 00 00 50 02 FF FF 7E 95 00 00 00 00 02 29 

[email protected] ~/ah $ cat output.txt 
` z2P��~�) 

[email protected] ~/ah $ hexdump -C output.txt 

00000000 60 00 00 00 00 14 06 20 00 00 00 00 00 00 00 00 |`...... ........| 
00000010 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 |................| 
00000020 00 00 00 00 00 00 00 02 00 15 00 15 7a 32 b1 08 |............z2..| 
00000030 00 00 00 00 50 02 ff ff 7e 95 00 00 00 00 02 29 |....P...~......)| 
00000040 

[email protected] ~/ah $ od -x output.txt 
0000000 0060 0000 1400 2006 0000 0000 0000 0000 
0000020 0000 0000 0000 0100 0000 0000 0000 0000 
0000040 0000 0000 0000 0200 1500 1500 327a 08b1 
0000060 0000 0000 0250 ffff 957e 0000 0000 2902 
0000100 

現在,當我嘗試同樣的事情在Red Hat,一些奇怪的行爲正在發生。

[[email protected]]$ xxd -r -p input.txt output.txt 

[[email protected]]$ cat input.txt 
60 00 00 00 00 14 06 20 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 02 00 15 00 15 7A 32 B1 08 
00 00 00 00 50 02 FF FF 7E 95 00 00 00 00 02 29 

[[email protected]]$ cat output.txt 
` P~)[[email protected]]$ hexdump -C output.txt 
00000000 60 00 00 00 00 14 06 20 00 00 00 00 00 00 00 00 |`...... ........| 
00000010 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 |................| 
00000020 00 00 00 00 50 02 ff ff 7e 95 00 00 00 00 02 29 |....P...~......)| 
00000030 

[[email protected]]$ od -x output.txt 
0000000 0060 0000 1400 2006 0000 0000 0000 0000 
0000020 0000 0000 0000 0100 0000 0000 0000 0000 
0000040 0000 0000 0250 ffff 957e 0000 0000 2902 
0000060 

我無法找出爲什麼red hat和linux mint/ubuntu的輸出之間出現這種差異。

如果可能的話告訴我一些AWK /殼代替xxd -r -p

執行相同的Pleae幫我!

編輯:

在Linux Mint的/ ubuntu系統..

[email protected] ~/ah $ hexdump -C input.txt 
00000000 36 30 20 30 30 20 30 30 20 30 30 20 30 30 20 31 |60 00 00 00 00 1| 
00000010 34 20 30 36 20 32 30 20 30 30 20 30 30 20 30 30 |4 06 20 00 00 00| 
00000020 20 30 30 20 30 30 20 30 30 20 30 30 20 30 30 20 | 00 00 00 00 00 | 
00000030 0a 30 30 20 30 30 20 30 30 20 30 30 20 30 30 20 |.00 00 00 00 00 | 
00000040 30 30 20 30 30 20 30 31 20 30 30 20 30 30 20 30 |00 00 01 00 00 0| 
00000050 30 20 30 30 20 30 30 20 30 30 20 30 30 20 30 30 |0 00 00 00 00 00| 
00000060 20 0a 30 30 20 30 30 20 30 30 20 30 30 20 30 30 | .00 00 00 00 00| 
00000070 20 30 30 20 30 30 20 30 32 20 30 30 20 31 35 20 | 00 00 02 00 15 | 
00000080 30 30 20 31 35 20 37 41 20 33 32 20 42 31 20 30 |00 15 7A 32 B1 0| 
00000090 38 20 0a 30 30 20 30 30 20 30 30 20 30 30 20 35 |8 .00 00 00 00 5| 
000000a0 30 20 30 32 20 46 46 20 46 46 20 37 45 20 39 35 |0 02 FF FF 7E 95| 
000000b0 20 30 30 20 30 30 20 30 30 20 30 30 20 30 32 20 | 00 00 00 00 02 | 
000000c0 32 39 20 0a 0a 0a 0a 0a       |29 .....| 
000000c8 

在Red Hat機..

[[email protected]]$ hexdump -C input.txt 
00000000 36 30 20 30 30 20 30 30 20 30 30 20 30 30 20 31 |60 00 00 00 00 1| 
00000010 34 20 30 36 20 32 30 20 30 30 20 30 30 20 30 30 |4 06 20 00 00 00| 
00000020 20 30 30 20 30 30 20 30 30 20 30 30 20 30 30 0a | 00 00 00 00 00.| 
00000030 30 30 20 30 30 20 30 30 20 30 30 20 30 30 20 30 |00 00 00 00 00 0| 
00000040 30 20 30 30 20 30 31 20 30 30 20 30 30 20 30 30 |0 00 01 00 00 00| 
00000050 20 30 30 20 30 30 20 30 30 20 30 30 20 30 30 20 | 00 00 00 00 00 | 
00000060 0a 30 30 20 30 30 20 30 30 20 30 30 20 30 30 20 |.00 00 00 00 00 | 
00000070 30 30 20 30 30 20 30 32 20 30 30 20 31 35 20 30 |00 00 02 00 15 0| 
00000080 30 20 31 35 20 37 41 20 33 32 20 42 31 20 30 38 |0 15 7A 32 B1 08| 
00000090 20 0a 30 30 20 30 30 20 30 30 20 30 30 20 35 30 | .00 00 00 00 50| 
000000a0 20 30 32 20 46 46 20 46 46 20 37 45 20 39 35 20 | 02 FF FF 7E 95 | 
000000b0 30 30 20 30 30 20 30 30 20 30 30 20 30 32 20 32 |00 00 00 00 02 2| 
000000c0 39 20 20 0a          |9 .| 
000000c4  
+0

其他一些選項/命令任何人都可以這個問題,一些sed的預處理,例如,告訴我可以使用哪一個來代替'xxd -r -p'這可以幫助我 –

+1

如果'input.txt'文件在兩臺機器上應該是相同的,請檢查它是否給出了'md5sum input.txt'兩臺機器上的散列相同(否則,副本失敗:可能的硬件故障...)。 –

回答

3

我不知道發生了什麼,但第三行是在紅帽子上吃東西。

這就是你要求的。用awk + ​​bash反轉hexdump。

echo 'ibase=16' | cat - hdump | tr ' ' \; | bc | awk '{printf("%c",$0)}' 

與input.txt的替代hdump

echo 'ibase=16' | cat - input.txt | tr ' ' \; | bc | awk '{printf("%c",$0)}' > output.txt 

代碼發現這裏: http://www.unix.com/shell-programming-scripting/132294-reverse-hexdump-without-xxd.html#post302404631

+0

幾乎沒有修改我的腳本它爲我工作... thanx –

0
$ cat foo 
60 00 00 00 00 14 06 20 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 02 00 15 00 15 7A 32 B1 08 
00 00 00 00 50 02 FF FF 7E 95 00 00 00 00 02 29 

$ cat foo | xxd -r -p | hexdump -C 
00000000 60 00 00 00 00 14 06 20 00 00 00 00 00 00 00 00 |`...... ........| 
00000010 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 |................| 
00000020 00 00 00 00 00 00 00 02 00 15 00 15 7a 32 b1 08 |............z2..| 
00000030 00 00 00 00 50 02 ff ff 7e 95 00 00 00 00 02 29 |....P...~......)| 
00000040 
+0

不適合我... –

+0

@UditGupta:嗯,我無法複製你所做的,因爲我沒有你的輸入文件。 –

+0

看到我的編輯,如果它可以幫助!我真的需要這個.. –

1

我會說,你在input.txt的文件將一些看不見的性格,使第三行看起來無效。 也許無效的字符是編碼相關的,這就是爲什麼它在一臺機器上工作,而不是在其他機器上工作。

看到hexdump -C input.txt檢查結果會很有幫助。

+0

我已經添加了詳細信息,請參閱我的編輯.. –

+0

那裏沒有什麼奇怪的,但你確定該文件在Redhat機器是相同的?你可以在那裏運行相同的命令嗎? – rodrigo

+0

是的,你是對的,他們是不一樣的...我已經添加了紅色帽子m/c的轉儲also.Please看看.. –

3

逾期答案,但希望可以幫助到別人閱讀本:

XXD有空格馬車處理在「-r -p」模式。在掃描字符時,如果它連續輸入兩個非十六進制字符,它將丟棄所有內容,直到下一個換行符或文件結束。如果連續兩個字符中的第二個字符本身就是換行符(即換行符以換行符結尾,換行符後面),那麼淨效應就是丟棄整個下一行。

我很確定這是造成Udit的問題。 (我認爲他後來添加了input.txt的hexdump實際上並不反映該文件的原始狀態。)

看起來xxd主要是作爲vim分發的一部分進行維護的。我查看了vim 7.3中包含的xxd源代碼,並且修復了錯誤處理問題。不幸的是,沒有人更新版本#,所以它仍然報告相同的xxd 1.10版本字符串。

試着創建這個測試文件(第一行末尾有1個空格,第二行沒有空格;在Linux/Unix上應該是22個字節的文件;如果你運行「xxd -p」應報告3230200a34652034662035340a34322034312034340a):如果您在本運行「XXD -r -p」,有一個版本XXD表現出馬車搬運

20 
4e 4f 54 
42 41 44 

,你應該看到它打印BAD。使用更新(固定)版本的xxd,它將打印NOTBAD。

如果碰上這種車操作和更新到XXD的新版本是不是一種選擇,你能避免,如果

$ sed -e 's/ *//g' -e '/^$/d' input.txt | xxd -r -p > output.txt