«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, поэтому я хочу получить всю информацию между этими двумя строками (я думаю, что это должно работать, но я еще не тестировал ее)

  • Как мы можем переименовать файл с точкой с запятой в качестве части имени файла?
  • Escape filepath
  • Как я могу рекурсивно заменить строку в именах файлов и каталогов?
  • Существуют ли проблемы с дефисами в функциях, псевдонимах и исполняемых файлах?
  • Выполнить функцию readline без привязки клавиш?
  • Как удалить повторяющиеся строки из файла?
  • прекратить обработку в сценарии оболочки, но не выходить
  • Значок прекращает загрузку после перезапуска приложения
  • 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 
    Linux и Unix - лучшая ОС в мире.