xxd выводит только двоичный файл

Используя команду:

xxd -b some_text

выведет двоичное представление и исходный текст:

000054c: 11101111 10100001 10110110 00010000 01011011 10000110  ....[.
0000552: 01111000 11001000 01010101 11000101 11101111 10101111  x.U...
0000558: 10010111 11101010 00011001 01010100 10101010 10001110  ...T..

Как я могу иметь утилиту для вывода только двоичного файла без чего-либо еще?

4 ответа

Если вы хотите только двоичный файл, а не смещение, вы можете расширить Томас Дики sed однострочник для смещения тоже:

xxd -b some_text | sed -e 's/^.*: //; s/[[:space:]][[:space:]]*.\{6,6\}$//'

"xxd" не принимает "some_text" в качестве входных данных, но "infile".
Краткий ответ, используя команду "cut", печатая 6 полей (от 2 до 7):

xxd -b some_file | cut -d\  -f2-7

Эта комбинация не указана на странице руководства. Однако вы можете отфильтровать результат, используя awk/sed/perl (на ваш выбор). Для данного примера достаточно sed:

xxd -b some_text | sed -e 's/^[^:]*:[[:space:]][[:space:]]*//' -e 's/[[:space:]][[:space:]]*.\{6,6\}$//'

То есть:

  • В первом варианте "-e" удалите все через первый ":", за которым следует пробел.

  • Во втором варианте "-e", начиная хотя бы с одного пробела

  • затем 6 символов (неясно, могут ли они быть пробелами, но тестирование, кажется, подтверждает, что это не так)
  • снять всю согласованную строку

Вы можете заменить "[[:space:]][[:space:]]*" точным количеством пробелов, которые вы хотите сопоставить, но хотя и более многословно, класс символов также более мощный.

В качестве альтернативы (поскольку пробел является разделителем полей по умолчанию в awk), можно передать через awk:

xxd -b some_text | awk '{ printf "%s %s %s %s %s %s\n", $2, $3, $4, $5, $6, $7 }'

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

Попробуй это:

      xxd -b some_file > /tmp/output
cut -d: -f2 |egrep "[01 ]+"
Другие вопросы по тегам