Intereting Posts
Как создать точку доступа Wi-Fi / поделиться подключением на Kali Linux? mass_dns: warning: Невозможно определить какие-либо DNS-серверы. Обратный DNS отключен Не показывать тома как безопасно съемные для системного диска, установленного во внешнем корпусе USB Не удается войти в меню загрузки GNU GRUB! В rsync можно добавить исключения из -delete с помощью внешнего файла? Ошибка компиляции Cygwin в ffmpeg: gcc не может создать исполняемый файл Изображение KALI (с установленными драйверами широкополосного доступа, которые работают для macbook pro в конце 2013 года) для использования в режиме реального времени Как слить два словаря счетчика частоты – unix cmd? просмотр printf после трубы (или подоболочки?) Локализация двоичного файла с dd Срез между двумя строками (электронная почта + слово) Kernel Panic не выдает никаких файлов журнала Перенаправление стандартного вывода и стандартная ошибка для одного файла Откройте несколько каталогов на разных вкладках в том же окне в CentOS Почему я не могу найти файлы cookie с веб-сайтов, доступных через IP-адрес в Firefox cookie.sqlite?

shell script / utility заменить 2 байта unicode в двоичном файле

У меня много больших файлов Unicode. Я хотел бы заменить каждую пару байтов Unicode новой байтовой парой Unicode. Например, исходный файл содержит «C3 B9 C3 AB C3 B8 C3 B0», и я хотел бы заменить его на «D7 A0 D7 A8 D7 9B D7 A9». Мне нужно было бы заменить каждый «C3 B9» на «D7 A0» по всему файлу. Будет заменено около 30 различных значений «C3 XX» на значения «D7 YY». Мне нужна таблица для прокрутки для каждой замены.

В идеале это заменит исходный файл, но также может создать новый выходной файл.

Есть ли утилита, работающая под Ubuntu, которая будет выполнять эту работу?

Это возможно с perl,

Пример файла:

echo -e "\xe8\x90" > a

И теперь, если вы это сделаете:

perl -pne 's/\xe8\x90/\x41\x42/g' < a > output

Вы получаете 0x41 0x42 , что означает AB

Альтернативой вызову perl является использование sed

 sed -i.bckp -e "s/\xc3\xb9/\xd7\xa0/" file 

Используя редактор потока (sed), я выполняю его на месте (что означает, что он будет полностью изменять файл), и я поставил .bckp в качестве аргумента для -i, чтобы старый файл был скопирован. Затем я запускаю выражение swap, которое ищет ваши шестнадцатеричные байты с регулярным выражением и свопит его с байтами, которые вы хотите использовать. И вызов файла – это большой файл, с которым вы хотите сделать это.

Если вы хотите заменить место вместо резервной копии (например, файл находится в режиме репо), вы можете просто удалить .bckp после -i, и он не будет создавать никаких новых файлов.

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