Как удалить все, кроме числа из вывода hexdump?

У меня есть вывод base64 для огромного файла, вывод также явно огромен, и в отдельном файле я хотел преобразовать большое число в нем в base10, поэтому я теперь использовал hexdump ] чтобы получить его в формате base16 ... Но вывод выглядит примерно так:

0077000 0022 00de 0000 0000 de00 0800 0000 0000
0077010 0008 0473 0c16 221f 0200 0000 0001 0100
0077020 0001 0022 00de 0000 0000 de00 0800 0000
0077030 0000 0008 0473 0c16 221f 0200 0000 0001
0077040 0100 0101 0032 00df 0000 0000 df00 0800
0077050 0000 0000 0008 0473 0c16 221f 0200 0000
0077060 0001 0100 0010 0073 006c 002d 006d 006f
0077070 0064 0065 006d 0000 0000 0000 0000 0000
0077080 0000 0000 0000 0000 0000 0000 0000 0000
*
0077800 0022 00df 0000 0000 df00 0800 0000 0000
0077810 0008 0473 0c16 221f 0200 0000 0001 0100
0077820 0001 0022 00df 0000 0000 df00 0800 0000
0077830 0000 0008 0473 0c16 221f 0200 0000 0001
0077840 0100 0101 0078 d690 0008 0800 90d6 961a
0077850 0006 0600 1a96 0473 0c16 221f 0000 0000
0077860 0001 0100 0056 0073 006c 002d 006d 006f
0077870 0064 0065 006d 002d 0064 0061 0065 006d
0077880 006f 006e 005f 0032 002e 0039 002e 0031
0077890 0031 007e 0032 0030 0031 0031 0030 0033
00778a0 0032 0031 002d 0031 0031 005f 0069 0033
00778b0 0038 0036 002e 0064 0065 0062 0000 0000
00778c0 0000 0000 0000 0000 0000 0000 0000 0000
*

Я знаю , как удалить все пробелы и возвраты и сделать все это в одной строке , но как мне превратить звезды в удаленные линии, которые они представляют, и удалить первые 8 символов, которые не являются частью числа? Или, может быть, есть способ заставить hexdump просто вывести число вместо всего остального? Файл, очевидно, слишком большой для меня, чтобы сделать это вручную, поэтому команда для его автоматического выполнения будет принята с благодарностью. Я использую Ubuntu GNOME 15.10 с GNOME 3.18.

0
задан 12 April 2016 в 10:57

3 ответа

Можно использовать xxd, чтобы создать шестнадцатеричный дамп стандартного стиля

$ xxd -p /etc/passwd | head -n 3                                                                                      
726f6f743a783a303a303a726f6f743a2f726f6f743a2f62696e2f626173
680a6461656d6f6e3a783a313a313a6461656d6f6e3a2f7573722f736269
6e3a2f7573722f7362696e2f6e6f6c6f67696e0a62696e3a783a323a323a

И произвести его в файл

$ xxd -p /etc/passwd > output.hex

, можно восстановить данные позже с -r -p опции

$ xxd -r -p output.hex  | head -n 3                                                                                   
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin

Пара другие методы:

$ hexdump -ve '1/1 "%.2x"' /etc/passwd
$  od -t x1 /etc/passwd | awk '{$1=""; gsub(/\ /,"");print}'
0
ответ дан 12 April 2016 в 20:57
  • 1
    Спасибо это работало! Я сократил все кроме аудио/... от totem.thumbnailer и вставил его в новом ffmpeg.thumbnailer, и это работает! Я вставил тех приложение/... и изображение/... MimeTypes, которые были в в исходном totem.thumbnailer также, я didn' t обнаруживают проблему... Это будет? – Panos Ts. 21 August 2017 в 22:01

Значением по умолчанию hexdump удалит повторенную строку и поместит сингл * в место, куда одна или несколько строк были удалены. Путем удаления первого столбца с положениями файла Вы потеряете единственный признак того, сколько строк было удалено, таким образом, больше не возможно восстановить исходный файл.

, По-видимому, Вы хотите число, которое исключительно представляет исходный файл, таким образом, необходимо было бы запустить с hexdump -v. Как показано в предыдущем ответе, возможно дать hexdump другие аргументы для изменения выходного формата в формат, который Вы просили.

Однако, если бы у Вас по некоторым причинам только есть вывод hexdump -v а не исходный файл, также было бы возможно удалить первый столбец и пробел как это:

cat filename.txt | cut -c9- | tr -dc 0-9a-f

Здесь cut -c9- удалит крайние левые 8 символов каждой строки, производящей только 9-й символ и все после него. И tr -dc 0-9a-f сохранит только символы в диапазоне 0-9 или a-f, таким образом, все пробелы и новые строки удалены.

0
ответ дан 12 April 2016 в 20:57
  • 1
    @heynnema No, который я говорю, которые делают уверенное, что опция включена (и если it' s быть отключают, заставляют его включить), \\его только из-за моего плохого английского языка, я отредактирую свой ответ для прояснения – Ali Razmdideh 21 August 2017 в 13:03

Используйте hexdump определение пользовательского выходного формата:

hexdump -ve '8/1 "%04x " "\n"'
  • -v: печатают все данные (избавляется от звездочек, которые означают повторение последней строки вывода)
  • -e '8/1 "%04x " "\n"': печать 8 раз единственный байт в дополненном нулем (до четырех цифр) нижний регистр heaxadecimal представление, сопровождаемое, пространство и добавляет новую строку, пока больше данных не доступно.
% </dev/urandom head -c 32 | hexdump -ve '8/1 "%04x " "\n"'
003c 00b0 00bb 00de 003d 0041 0072 00a5
00c2 0078 00b9 009b 00b7 00fc 0076 0030
00b7 005c 00f4 0036 00a0 004e 003b 001b
0028 00cd 006a 0079 0055 0014 000c 007b
<час>

я не уверен, почему Вы хотели бы сделать это, но по-видимому Вы хотите распечатать все на одной строке без пробелов.

, Если это так:

hexdump -ve '/1 "%04x"'
% </dev/urandom head -c 32 | hexdump -ve '/1 "%04x"'
0046007c00b2003300e0009b00eb00d500bf006900570081008e003e005a002f0024001700ab00000084001e00ad00ab003a004800bf0039005c00aa00030072%
% 
0
ответ дан 12 April 2016 в 20:57

Другие вопросы по тегам:

Похожие вопросы: