«Grep-ing» от A до B в выводе hexdump

Вот ситуация: я должен найти в выводе hexdump байты между строкой A и строкой B. Структура hexdump – это что-то вроде:

 -random bytes -A + useful bytes + B -random bytes -A + useful bytes + B -random bytes 

И теперь, вопросы: – Можно ли grep «от A до B»? Я не видел ничего подобного на странице руководства или в Интернете. Я знаю, что могу сделать это вручную, но мне нужно его скриптировать. – Возможно ли показать вывод hexdump без номеров строк? Это кажется очень разумным, но я не нашел способ это сделать.

Благодаря!

Edit: Я пытаюсь восстановить 2 удаленных изображения JPEG из устройства loopback, поэтому я не могу показать весь вывод (это очень длинный), но вот его часть:

 0010400 ff d8 ff e0 00 10 4a 46 49 46 00 01 01 00 00 01 0010410 00 01 00 00 ff fe 00 3c 43 52 45 41 54 4f 52 3a [...] 0030f50 3e e9 fb a4 54 37 70 7f cb 55 03 fd af f1 a2 32 0030f60 e8 26 8f ff d9 00 00 00 00 00 00 00 00 00 00 00 

в стандарте говорится, что файлы JPEG начинаются с 0xff 0xd8 и заканчиваются 0xff 0xd9, поэтому я хочу получить всю информацию между этими двумя строками (я думаю, что это должно работать, но я еще не тестировал ее)

3 Solutions collect form web for “«Grep-ing» от A до B в выводе hexdump”

Возможно, было бы лучше, если бы это было строго бинарное, как упоминалось здесь, bbe похоже, является инструментом для работы. Следующая команда записывает JPEG в нулевые заполненные числовые файлы.

 bbe -s -b '/\xff\xd8/:/\xff\xd9/' -e 'w %05B.jpg' > /dev/null 

непроверенной

 awk ' /ff d8/ || ($2 == "d8" && ff_prevline) {p = 1} p {print} /ff d9/ || ($2 == "d9" && ff_prevline) {p = 0} {ff_prevline = ($NF == "ff")} ' 

Один из способов использования perl . Он будет выводить только этот диапазон байтов между ff 8d и ff 9d , без номеров строк:

Предполагая, что следующие данные как содержание infile :

 0010400 ff d8 ff e0 00 10 4a 46 49 46 00 01 01 00 00 01 0010410 00 01 00 00 ff fe 00 3c 43 52 45 41 54 4f 52 3a 0030f50 3e e9 fb a4 54 37 70 7f cb 55 03 fd af f1 a2 32 0030f60 e8 26 8f ff d9 00 00 00 00 00 00 00 00 00 00 00 

Запустить следующий perl -вкладыш:

 perl -ne ' if ( (my $start = m/ff\sd8/) .. (my $end = m/ff\sd9/) ) { s/\S*\s//; s/\A.*(?=ff\sd8)// if $start; s/(?<=ff\sd9).*\Z// if $end; print } ' infile 

Это даст следующий результат:

 ff d8 ff e0 00 10 4a 46 49 46 00 01 01 00 00 01 00 01 00 00 ff fe 00 3c 43 52 45 41 54 4f 52 3a 3e e9 fb a4 54 37 70 7f cb 55 03 fd af f1 a2 32 e8 26 8f ff d9 
  • Почему я не могу напечатать переменную, которую я вижу на выходе env?
  • Есть ли преимущество в использовании ksh над zsh?
  • Нумерация результатов grep
  • Вывод трубы из программы, которая выводится только в файл
  • Как разобрать CSV-файл на основе групп из определенного количества строк?
  • Где сохранить временные файлы для сценариев оболочки
  • Соответствие POSIX программы cd?
  • Стандартное решение для отображения сообщений на оболочке или с помощью оконных менеджеров gui
  • условие команды иногда целое число иногда строка
  • Передайте список каталогов (содержащих пробелы) в команду в скрипте
  • Расширенное использование / команда оболочки
  • когда начало работы cron после установки нового crontab?
  • Linux и Unix - лучшая ОС в мире.