2017-09-07 11 views
0

私はWindows上でGNU sedバージョン4.2.1を実行しています。私は%%EOF +改行+最後のレコードに多くのNUL文字を持つ膨大な数のPDFファイルを持っています。sedを使ってpdfファイルを修正する

下記のhexdumpを参照してください。 %%EOFのみであることを

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\x0d\x0a\x0{10,30000}はNotepad ++の文字と一致しますが、sedでは動作しないようです。誰でも手伝ってくれますか?どうもありがとう。与えられたinput.pdf

を行うための変数にファイル内の最後の%% EOFのバイトオフセットを読んで、あなたのgrepがそれをサポートしていると仮定すると、

+0

sedは、複数行の文字列を簡単に一致させることができないように、行指向で動作します。パターンに改行文字\ x0aが含まれています。私はsedがそのタスクのための最良の選択ではないと思うが、もし専門家レベルで使用されていれば可能かもしれない。 %% EOFに続く改行とヌルバイトの問題は何ですか? –

+0

これらのファイルをAdobe Reader XIで開くことはできません。 –

答えて

0

はカットオフ

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

をオフセット最初のオフセット+ 5バイト(文字列の長さは%%EOF)、元のファイルから出力.pdfが必要です。

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

ただし、PDFの性質(例:末尾に%% EOFはありません(編集:または他のデータですが、%%EOF [thx @mkl]の後のヌルバイト)これは、あなたが望むものとは異なる動作をする可能性があります。

+0

* "最初のオフセット+ 5バイト(文字列%% EOFの長さ)を元のファイル" * - から切り捨てますが、opが望むものではありません。 '%% EOF'ラインである。 – mkl

+0

これは、%% EOFの背後にヌルバイトやその他のデータがあるかどうかとは無関係であることを認めます。 –

関連する問題