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

Вот ситуация: я должен найти в выводе из hexdump байты между строкой A и строкой B. Структура hexdump выглядит примерно так:

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

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

Спасибо!

2 ответа

Вы можете использовать Perl-подобные обходные утверждения для сопоставления всего между A и B, не считая A и B:

$ echo 'TEST test A foo bar B test' | grep -oP '(?<=A).*(?=B)'
 foo bar 

Однако, принимая во внимание ответ Майкла, вам придется преобразовать hexdump вывод в одну строку для использования grep, Вы можете убрать "номера строк" ​​на своем пути:

hexdump filename | sed -r 's/\S{5,}//g' | tr '\n' ' '

или лучше

hexdump filename | cut -d ' ' -f 2- | tr '\n' ' '

Теперь все на одной линии, поэтому grep должен быть ленивым, а не жадным

$ echo 'TEST test A foo bar B test A bar foo B test' | grep -oP '(?<=A).*?(?=B)'
 foo bar 
 bar foo 

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

PS Если вы в порядке с включением A и B в матче, просто сделайте

$ echo 'TEST test A foo bar B test A bar foo B test' | grep -oP 'A.*?B'
A foo bar B
A bar foo B

grep программа работает только на одной строке одновременно; вы не сможете заставить его работать разумно на шестнадцатеричном дампе.

Мое предложение: используйте функцию регулярного выражения в perl или ruby ​​или на вашем любимом языке сценариев, чтобы получить необработанные двоичные данные для строки. Этот пример в ruby:

ARGF.read.force_encoding("BINARY").scan(/STR1(.*?)STR2/);

Это создаст массив, содержащий все двоичные строки между вхождениями STR1 и STR2. Оттуда вы можете запустить каждый hexdump(1),

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