Использование 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) это может вести себя не так, как вы хотите, или вызывать множество других проблем.