bashにスペースなしで16進文字のみを含むファイルの16進ダンプを作成する方法は?


188

Linuxでbashを使用してバイナリファイルの未変更の 16進ダンプを作成するにはどうすればよいですか?odそしてhexdumpコマンドダンプの両方の挿入空間を、これは理想的ではありません。

出力にスペースまたは改行を除いたすべての16進文字を含む長い文字列を単純に書き込む方法はありますか?


回答:


250

xxd -p file

または、すべてを1行で表示する場合は、次のようにします。

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


13
fyiプロセスを元に戻すには:xxd -r -ps hexascii.txtファイル(改行があってもなくてもかまいません)
Curtis Yallop

92

書式文字列により、hexdumpを希望どおりに動作させることができます(バイト単位で空白文字はまったくありません)。

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

1/1「各フォーマットが1回適用され、1バイトを取る」ことを意味し"%.2x"、printfと同様に実際のフォーマット文字列です。この場合:2文字の16進数。短い場合は先行ゼロ。


7
が必要です。そうしないと、-v繰り返されるバイトが削除され、アスタリスクに置き換えられます。
追って通知があるまで一時停止。

2
hexdumpに対して自体は(の明白な付属器出力の最後に改行(のみ)。..追加することができる場合、私は疑問に思う; echoことは不可能bashのエイリアスとして使用することができます)
mykhal

2
私のエイリアス:alias to_hex="hexdump -ve '1/1 \"%.2x\"' && echo"
devstuff

反復回数とバイト数のデフォルトは1であるため、1/1を省略して、hexdump -ve '"%.2x"'
Alex Che

@mykhal、出力のバイト数がわかっている場合は可能です。セイあなたが出力にhexdumpに対してを使用している場合のみ、最初の13バイト:hexdump -n 13 -e '13/1 "%.2x" "\n"'
アレックスチェ

24

のバージョンの詳細に依存しているようですod。OSXでは、これを使用します。

od -t x1 -An file |tr -d '\n '

(アドレスなしの16進バイトとして出力されます。もちろん空白はその後削除されます。)


1
-vこのコンテキストでも追加します。それ以外の場合は、で繰り返しをスキップし*ます。
Ciro Santilli郝海东冠状病六四事件法轮功

10

Perlワンライナー:

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

確認済み。「xxd -p file | tr -d '\ n'」に一致します。
Curtis Yallop、2014年

1
fyiプロセスを逆にするには:perl -e 'local $ /; プリントパック "H *"、<> '<hexascii.txt> file
Curtis Yallop

「ローカル$ /」は不要です。
Curtis Yallop、2014年

最後のコメントの更新:「ローカル$ /」は「パック」には不要です。アンパックの場合は必要ですが、「undef $ /」を置くこともできます。$ /は行区切り文字です(デフォルトはNL)。undefinedは、それをslurpモードにします。したがって、文字列コンテキストで参照される<>は、バイナリファイル全体を行に解析せずにプルします。
Curtis Yallop、2014年

別の形式:perl -e 'print unpack "H *"、join( ""、<>)' <file
Curtis Yallop

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.