Использование sed для исправления pdf файлов

Я использую GNU sed версии 4.2.1 на Windows. У меня есть огромное количество файлов PDF, имеющих %%EOF + перевод строки + много символов NUL в последней записи.

Смотрите hexdump ниже.

0000b890: 25 25 45 4F 46 0D 0A 00 - 00 00 00 00 00 00 00 00 |%%EOF           
|

0000b8a0: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 |                
|

Мне нужно изменить последнюю запись, чтобы быть %%EOF только. Выражение ^%%EOF\x0d\x0a\x0{10,30000} соответствует символам в Notepad ++, но, похоже, не работает в sed. Кто-нибудь может помочь? Большое спасибо.

1 ответ

Предполагая, что ваш grep поддерживает это, для данного input.pdf сделать

Считать байтовое смещение последнего %%EOF в файле в переменную offset

offset=$( grep -a -b '%%EOF' input.pdf  | tail -1 | cut -d: -f1 )

обрезать первое смещение + 5 байт (длина строки %%EOF) из исходного файла, то файл output.pdf должен быть тем, что вы хотели

head -c$(( $offset + 5 )) input.pdf > output.pdf

Но в зависимости от характера PDF (например, вообще нет %%EOF в конце, (edit: или другие данные, но нулевые байты следуют за %%EOF[thx @mkl) это может вести себя не так, как вы хотите, или вызывать множество других проблем.

Другие вопросы по тегам