从vcard(* .vcf)文件中提取名称和电子邮件信息

问题描述 投票:0回答:1

我从谷歌联系人导出了一个vcard文件(* .vcf)。现在,我想从FN中提取信息:(全名)和任何电子邮件地址信息(EMAIL *或带@的任何字符串)。我给了红宝石,蟒蛇和一击。到目前为止最有希望的是使用bash的方法。这是我从Github获得的脚本,但它无法正常工作。我相信当FN:信息不可用时,它会在vcard文件末尾的大约50个条目中停止。我仍然希望电子邮件地址信息可以在Note字段中,甚至在其他地方。这是脚本:

#!/bin/bash

vcard_file=$1

cat $vcard_file | while read line ; do
#echo $line;
if [ "$line" == "BEGIN:VCARD" ]; then
    #echo $line;
    full_name="";
    email="";
fi

if [[ $line = EMAIL* ]]; then
    if [ -z $email ]; then
        email=${line#*:}
        # echo EMAIL : $email;
    fi
fi
if [[ $line = FN:* ]]; then
    full_name=${line#*:}
    # echo FULL_NAME : $full_name;

fi
if [ "$line" == "END:VCARD" ]; then
    # email 이 존재한다면.
    if [ $email ]; then
        echo -e "$full_name\t$email"
    fi
fi
done

我通过以下方式调用脚本:

bash scritpname contacts.vcf > output.txt

这是一个有效的vcard条目:

BEGIN:VCARD
VERSION:3.0
FN:Agathe Strohmeier
N:Strohmeier;Agathe;;;
EMAIL;TYPE=INTERNET:[email protected]
TEL;TYPE=CELL:+49123456789
TEL;TYPE=CELL:123456789
TEL;TYPE=CELL:+123456789
NOTE:Anzeigename\: Agathe \nPrimäre E-Mail-Adresse\: [email protected]\n
END:VCARD

从下面的vcard我得不到任何信息,因为没有EMAIL关键字。我仍然想用@信息提取字符串并在某处放置“No Fullname”标记。此vcard条目没有全名或电子邮件信息,但有一个字符串,其中包含我要提取的电子邮件地址:

BEGIN:VCARD
VERSION:3.0
NOTE:Anzeigename\: [email protected]\nPrimäre E-Mail-Adresse\: [email protected]\n
END:VCARD

我在Linux Mint上,因此所有命令行工具都可用。任何google foo都无济于事。我希望我明确表达了我想要做的事情。我也对其他方法持开放态度,可能会预先处理contacts.vcf文件。感谢您的时间和快乐的绘画

linux bash extract vcard
1个回答
0
投票

你能问一下吗?

grep FN: contacts.vcf

(不确定语法是否正确)

有些边缘情况不起作用,但它应该适用于大多数情况。

© www.soinside.com 2019 - 2024. All rights reserved.