webdevqa.jp.net

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

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

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

169
David Raswik

xxd -p file

または、すべてを1行で表示する場合:

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

231
mark4o

書式文字列を使用すると、hexdumpを希望どおりに正確に動作させることができます(バイト単位で空白がまったくない)。

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

1/1は「各形式が1回適用されて1バイトかかる」ことを意味し、"%.2x"はprintfのように実際の形式文字列です。この場合:2文字の16進数。短い場合は先行ゼロ。

81
Michał Trybus

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

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

(これは、アドレスなしで、16進型として印刷されます。もちろん、その後に空白が削除されます。)

22
Donal Fellows

Perlのワンライナー:

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

他の回答が望ましいですが、純粋なBashソリューションの場合、 my answer here のスクリプトを変更して、ファイルの内容を表す16進文字の連続ストリームを出力できるようにしました。 (その通常モードはhexdump -Cをエミュレートすることです。)

2