混合文字列とバイナリファイルから文字列を抽出する

混合文字列とバイナリファイルから文字列を抽出する

私のNokiaバックアップファイルを許可されたvcard形式に変換したいと思います。バイナリデータの間に有効なvcard文字列が表示されます。たとえば、

!@#JUNKCHARACTERS!@#!@BEGIN:VCARD
VERSION:2.1
N:Jimmy;;;;
TEL;VOICE:4445551212
END:VCARD!@#JUNKCHARACTERS!@#!@

私は検索と置換のために16進エディタを使用してきましたが、それでも退屈です。 grepまたは他のコマンドラインツールを使用して、および間BEGIN:VCARDのすべての文字列を抽出できますかEND:VCARD

答え1

素直に言ってすみませんが、次のことはできません。

strings binary-file > binary-strings-output.txt

その後、文字列出力を後処理しますか?次の内容に従ってください。

awk '/BEGIN:VCARD/,$NF ~ /END:VCARD/' binary-strings-output.txt

答え2

BEGIN:VCARD開始は次のとおりです。との間のテキストのみを印刷しますEND:VCARD。これはEND:VCARD、との間に常に改行文字があると仮定しますBEGIN:VCARD

sed -n -e 's/.*[^A-Z]BEGIN:VCARD/BEGIN:VCARD/' \
       -e 's/END:VCARD[^A-Z].*/END:VCARD/' \
       -e '/BEGIN:VCARD/,/END:VCARD/p'

関連情報