我正在尝试将我的诺基亚备份文件转换为可接受的 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'