Bagaimana cara membuat dump hex file yang hanya berisi karakter hex tanpa spasi di bash?


188

Bagaimana cara membuat hex dump yang tidak dimodifikasi dari file biner di Linux menggunakan bash? The oddan hexdumpperintah kedua ruang insert di dump dan ini tidak ideal.

Apakah ada cara untuk hanya menulis string panjang dengan semua karakter hex, spasi minus atau baris baru dalam output?


Jawaban:


250

xxd -p file

Atau jika Anda ingin semuanya dalam satu baris:

xxd -p file | tr -d '\n'


13
fyi Untuk membalikkan proses: xxd -r -ps hexascii.txt file (tidak apa-apa dengan atau tanpa baris baru)
Curtis Yallop

92

Format string dapat membuat hexdump berperilaku tepat seperti yang Anda inginkan (tanpa spasi sama sekali, byte demi byte):

hexdump -ve '1/1 "%.2x"'

1/1berarti "setiap format diterapkan satu kali dan mengambil satu byte", dan "%.2x"merupakan format string yang sebenarnya, seperti pada printf. Dalam hal ini: angka heksadesimal 2 karakter, memimpin nol jika lebih pendek.


7
Anda memerlukan -vatau itu akan menjatuhkan byte berulang dan menggantinya dengan tanda bintang.
Dijeda sampai pemberitahuan lebih lanjut.

2
Saya ingin tahu apakah hexdump itu sendiri dapat menambahkan baris baru (hanya) ke akhir output .. (pelengkap jelas ; echomembuatnya tidak mungkin digunakan sebagai bash alias)
mykhal

2
Alias ​​saya:alias to_hex="hexdump -ve '1/1 \"%.2x\"' && echo"
devstuff

Hitungan iterasi dan byte dihitung sebagai default, jadi 1/1 dapat dihilangkan, meninggalkanhexdump -ve '"%.2x"'
Alex Che

@ mykhal, itu mungkin, jika Anda tahu jumlah byte dalam output. Katakanlah jika Anda menggunakan hexdump untuk hanya menghasilkan 13 byte pertama:hexdump -n 13 -e '13/1 "%.2x" "\n"'
Alex Che


10

Perl one-liner:

perl -e 'local $/; print unpack "H*", <>' file

Diverifikasi. Cocok dengan "xxd -p file | tr -d '\ n'".
Curtis Yallop

1
fyi Untuk membalikkan proses: perl -e 'local $ /; paket cetak "H *", file <> '<hexascii.txt>
Curtis Yallop

"$ /" Lokal tidak perlu.
Curtis Yallop

Perbarui ke komentar terakhir: "$ lokal /" tidak diperlukan untuk "paket". Untuk membongkar, Anda memerlukannya tetapi bisa juga dengan kata lain "undef $ /". $ / adalah pemisah baris (default NL). undefined memasukkannya ke mode-slurp. Jadi <> direferensikan dalam konteks string menarik seluruh file biner tanpa menguraikannya menjadi beberapa baris.
Curtis Yallop

Formulir alternatif: perl -e 'print unpack "H *", join ("", <>)' <file
Curtis Yallop

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.