Как создать шестнадцатеричный дамп файла, содержащий только шестнадцатеричные символы без пробелов в bash?

Как создать немодифицированный шестнадцатеричный дамп двоичного файла в Linux с помощью bash? Команды od и hexdump обе вставляют пробелы в дампе, и это не идеально.

Есть ли способ просто написать длинную строку со всеми шестнадцатеричными символами, минус пробелы или символы новой строки на выходе?

Ответ 1

xxd -p file

Или, если вы хотите все это на одной строке:

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

Ответ 2

Форматирование строк может привести к тому, что hexdump будет вести себя так, как вы хотите (без пробелов вообще, байт по байту):

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

1/1 означает, что "каждый формат применяется один раз и занимает один байт", а "%.2x" - это фактическая строка формата, например, в printf. В этом случае: двухсимвольное шестнадцатеричное число, ведущие нули, если короче.

Ответ 3

Кажется, что это зависит от деталей версии od. В OSX используйте это:

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

(Это печатает как шестнадцатеричные байты типа, без адреса. И, конечно же, пробелы удаляются впоследствии.)

Ответ 4

Perl однострочный:

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

Ответ 5

Другие ответы предпочтительнее, но для чистого решения Bash я изменил script в мой ответ здесь, чтобы иметь возможность выводить непрерывный поток шестнадцатеричных символов, представляющий содержимое файла. (Его нормальный режим - эмулировать hexdump -C.)