Подтвердить что ты не робот

Использование hexdump для вывода только ASCII

Я пытаюсь вывести значения ASCII, соответствующие некоторым двоичным данным. Я успешно применил утилиту hexdump для вывода hexdump и ASCII бок о бок, как показано ниже:

00000120  20 20 20 20 3d 20 30 78  30 30 30 30 30 30 33 30  |    = 0x00000030|
00000130  0a 01 00 00 00 23 00 00  00 75 75 69 64 30 20 20  |.....#...uuid0  |
00000140  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 3d  |               =|
00000150  20 30 78 39 30 38 32 61  63 35 61 0a 01 00 00 00  | 0x9082ac5a.....|
00000160  23 00 00 00 75 75 69 64  31 20 20 20 20 20 20 20  |#...uuid1       |
00000170  20 20 20 20 20 20 20 20  20 20 3d 20 30 78 37 34  |          = 0x74|
00000180  61 37 34 37 36 66 0a 01  00 00 00 23 00 00 00 75  |a7476f.....#...u|
00000190  75 69 64 32 20 20 20 20  20 20 20 20 20 20 20 20  |uid2            |
000001a0  20 20 20 20 20 3d 20 30  78 61 32 35 35 35 63 30  |     = 0xa2555c0|

Однако, я хотел бы видеть только ASCII как выходные значения. Меня не интересуют шестнадцатеричные значения. Например, выход должен быть следующий (примерно соответствующий выше):

= 0x00000030.....#...
uuid0=0x9082ac5a.....
uuid1=0x74a7476f

(для этого я не смог использовать переключатели hd.)

4b9b3361

Ответ 1

Если вам нужно только увидеть текстовое содержимое двоичного файла, строки должны быть полезны:

Для каждого указанного файла GNU strings печатает символ печати последовательности длиной не менее 4 символов (или число, указанное с опцией -n), за которым следует непечатаемый символ. strings в основном полезен для определения содержимого нетекстового файлы.

Ответ 2

В то время как ответ от raina77ow о команде strings(1) - это правильный способ получить желаемый результат, конкретный запрос на использование hexdump(1), чтобы отфильтровать только печатные символы могут иметь смысл в некоторых контекстах. Я отвечу на это специально здесь.

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

Ключ - это параметр -e и язык форматирования, который он поддерживает. Этот язык позволяет специфицировать строки формата, которые потребляют байты ввода и создают текст. Команда, например:

$ hexdump -e "16 \"%_p\" \"\\n\"" hexdump.exe | head -16

будет потреблять 16 байт за раз, отображать их в формате %_p и добавлять новую строку после каждого 16-го байта. Каждый непечатаемый символ заменяется на . на выходе.

Другими характерными форматами для рассмотрения являются %_c и %_u. Первый заменяет непечатаемый символ своей escape-последовательностью ANSI-C или трехзначным восьмеричным номером. Второй заменяет непечатать каждый символ обычным именем управляющего символа ASCII или двухзначным шестнадцатеричным числом.

Если в вашей копии hexdump отсутствует опция -e или она медленная, или вам вообще не хватает реализации hexdump, то недавно лицензированная, быстрая и разумно переносимая реализация hexdump в последнее время выпущенный William Ahern, стоит посмотреть. Он должен строить для множества Unix-подобных систем из коробки, и с небольшими изменениями, которые он создает с помощью MingW GCC в Windows. Ключевым атрибутом этой реализации является то, что один исходный файл может быть создан как разделяемая библиотека для включения в другую программу, как модуль Lua для использования из Lua, а также автономный исполняемый файл, реализующий команду hexdump.

Ответ 3

вы можете использовать od:

od -t c file

Или awk с hexdump следующим образом:

hexdump -C file | awk '{for(i=NF; i>17; --i) print $i}'

Примечание: вам нужно изменить команду awk, если вы измените количество столбцов в hexdump.

Ответ 4

hexdump -C file /dev/sda4|cut -c 62-77

Надеюсь, что это поможет