从字符串和二进制的混合文件中提取字符串

从字符串和二进制的混合文件中提取字符串

我正在尝试将我的诺基亚备份文件转换为可接受的 vcard 格式。它具有出现在二进制数据之间的有效 vcard 字符串。例如:

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

我一直在使用十六进制编辑器进行一些查找和替换,但即便如此,这也是乏味的。我可以使用 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'

相关内容