Sed 構文の問題

Sed 構文の問題

生のPCL / PSファイル(ハイブリッド)を修正していますが、何らかの理由でSed構文を実際に起動するために正しく機能させることはできません。以下は、stringsコマンドの出力例です。

*c50B
*c0P
&f1X
&f7y4X
%-12345X%!PS-Adobe-3.0 EPSF-3.0 <------Sed doesn't work for this pattern
%%Creator: tiff2ps  <----Sed works for this pattern
[data...]
%%EOF

これは私の仕事のsedコマンドです。

sed -n '/%%Creator/,/%%EOF/p'

しかし、%-12345X%で始めたいです。

sed -n '/%-12345X%/,/%%EOF/p'

最後のコマンドを実行すると、ファイル全体が出力されます。この行の組み合わせは機能しません。これで、「文字列」を含む生の印刷ファイルが表示されます。その行はsedが理解できない方法でエンコードされていますか?この問題を解決するアイデアはありますか?

以下を追加するように編集されました。

私はこれがPCLのエンコーディングとラインエスケープに関連していると確信しています。ファイルは PCL から PS に移動し、PS の最初のメッセージは独自の行に生成されません。 catの出力は次のようになります。

*c50BESC*c0PESC&f1XESC&f7y4XESC%-12345X%!PS-Adobe-3.0 EPSF-3.0
%%Creator: tiff2ps

ベストアンサー1

私の考えでは、sedがあなたが指示したことをしているようです:%-12345X%。最大 "%%Creator:" - 内容全体を印刷します。 sedは一致する「行」を印刷することを忘れないでください。私はあなたが要求したものが「この文字列から始まる」を印刷することだと思います。

ライン指向が保証されていないファイル(このファイルなど)を取得するには、ライン指向ツールに依存しないテクノロジを使用する必要があります。これは役に立つかもしれません:バイナリファイルの一部をダンプする方法。少し複雑ですが、文字列は非常にユニークなので、トリックを実行する必要があります。

うーん…ちょうどアイデアが思い浮かびました。たぶんこれが効果があるかもしれませんね。 %-12345X% 前の同じ「行」のすべての項目を削除します (文字列自体を除く)。次に、その行からファイルの終わりまですべての内容を印刷します。まだ試していませんが、アプローチは次のとおりです。

sed -n -e '/%-12345X%/s/.*%-12345X%/%-12345X%/' -e '/%-12345X%/,/%%EOF/p'

または、より良い方法は次のとおりです。

STR="%-12345X%"
sed -n -e "/${STR}/s/.*${STR}/${STR}/" -e "/${STR}/,/%%EOF/p"

おすすめ記事