Использование sed для извлечения шестнадцатеричных байтов из сырого USB-дампа - PullRequest
0 голосов
/ 13 июня 2011

Вот одна строка из необработанного дампа USB:

Id  Type                        Time        Length   Hex             Ascii

16  Out (USB URB Function: 45)  0.01513     2048     a3 e8 55 cc      correpondant ascii

Обратите внимание, что Id, Type, Time, Length все время меняются, и что количество шестнадцатеричных байтов действительно огромно.

Что я хочу сделать, это стереть все, кроме шестнадцатеричных байтов.Я думал об использовании sed для замены всего, что не было парой цифр / [букв от A до F] и между двумя пробелами:

sed -E 's/([^ ][^a-f0-9][^a-f0-9][^ ])//g' <orig >new

Но это дает мне следующее:

1Uun)   0.015013    2048    a3 e8 55 cc  

и только некоторые части ascii стерты.

Я попробовал некоторые другие команды sed, основанные на приведенной выше, но она тоже не работает.

Есть идеи?Спасибо.

Ответы [ 4 ]

2 голосов
/ 13 июня 2011

или просто используйте awk 'print $4', если есть разделители.

1 голос
/ 13 июня 2011

Sed, возможно, не лучший инструмент для этой работы. Я бы лично написал парсер на Python или подобном.

Однако, если вы хотите получить это, используя регулярные выражения из терминала, возможно, используйте grep:

% grep -o '\(\b[[:xdigit:]]\{2\}[[:space:]]\)\+' orig 
16 
a3 e8 55 cc 

Обратите внимание, что "16" является шестнадцатеричной парой.

0 голосов
/ 13 июня 2011

Или на шаг впереди идеи Джонсивеба,

$:> printf "16  Out (USB URB Function: 45)  0.01513     2048     a3 e8 55 cc      correpondant ascii\n" \
| grep -o '\(\b[[:xdigit:]]\{2\}[[:space:]]\b[[:xdigit:]]\{2\}[[:space:]]\)\+'

производит

a3 e8 55 cc

Если у вас есть новый GNU sed, на который вы можете положиться, вы сможете легко перевести регулярное выражение grep в sed.

И, чтобы проиллюстрировать технику разрезания бурузаэмон

$:> printf "16  Out (USB URB Function: 45)  0.01513     2048     a3 e8 55 cc      correpondant ascii\n" \
| cut -c54-66

1012 * производит *

a3 e8 55 cc

Но это предполагает, что ваш столбец идентификаторов (как и другие) не изменит размер.

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

0 голосов
/ 13 июня 2011

Как насчет команды cut ?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...