Я пытаюсь использовать регулярное выражение для форматирования некоторого двоичного файла из xxd -b
, но чтобы продемонстрировать это просто, я покажу вам, чего я ожидаю:
Регулярное выражение для удаления: /1x|1.*/
Текст: 1x21y3333333313333
-> 2
Если все вхождения 1x
удалены, то все, начиная с первой 1, которая появляется, должно быть удалено.Должно быть сразу очевидно, что происходит, но если это не так, поиграйте с этим .Ключ в том, что если 1x
соответствует, остальная часть шаблона должна быть прервана.
Вот вывод из echo "AA" | xxd -b
(bindump of AA\n
):
0000000: 01000001 01000001 00001010 AA.
Моя цель: 1. удалить первые 0 для каждого байта (ascii = 7 бит) и 2. удалить оставшуюся часть строки, чтобы сохранить только фактический двоичный файл.Поэтому я передал его в sed 's/ 0//g'
:
0000000:100000110000010001010 AA.
Добавляя второй шаг, sed -E 's/ 0| .*//g'
:
0000000:
Очевидно, я ожидаю вместо этого получить:
0000000:100000110000010001010
Вещи, которые я пробовал, но не выполнил работу:
xxd
может занять -g0
для объединения столбцов, но он сохраняет первый ноль в каждом байте (символыкаждый занимает байт, а не 7 бит) -r
Тем временем я буду использовать Perl, но такое поведение сбивает меня с толку и, возможно, есть причина (урок)здесь