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

时间:2019-03-11 10:27:29

标签: linux bash extract vcard

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

#!/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:agathe@example.com
TEL;TYPE=CELL:+49123456789
TEL;TYPE=CELL:123456789
TEL;TYPE=CELL:+123456789
NOTE:Anzeigename\: Agathe \nPrimäre E-Mail-Adresse\: agathe.strohmeier@example.com\n
END:VCARD

由于没有EMAIL关键字,因此无法从以下vcard获得任何信息。我仍然想用@ information提取字符串,并在某处放置“ No Fullname”标签。该vcard条目没有全名或电子邮件信息,但是有一个包含我要提取的电子邮件地址的字符串:

BEGIN:VCARD
VERSION:3.0
NOTE:Anzeigename\: Dennis@uni.de\nPrimäre E-Mail-Adresse\: Otieno@uni.de\n
END:VCARD

我在Linux Mint上,因此所有命令行工具均可用。任何谷歌的foo是没有用的。我希望我已清楚说明我要做什么。我也对其他方法持开放态度,也许可以对contacts.vcf文件进行预处理。感谢您的时间和绘画快乐

1 个答案:

答案 0 :(得分:0)

您可以将其复制吗?

rustc 1.34.0-nightly (02c4c2892 2019-02-26)

(不确定语法是否正确)

在某些极端情况下,这是行不通的,但是在大多数情况下应该行得通。