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 ]+"