【问题标题】:Extracting name and email information from vcard (*.vcf) file从 vcard (*.vcf) 文件中提取姓名和电子邮件信息
【发布时间】:2019-03-11 10:27:29
【问题描述】:

我从我的 Google 通讯录中导出了一个 vcard 文件 (*.vcf)。现在,我想从 FN 中提取信息:(全名)和任何电子邮件地址信息(EMAIL* 或任何带有 @ 的字符串)。我试了一下 ruby​​、python 和 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 中获得任何信息。我仍然想提取带有@信息的字符串并在某处放置一个“无全名”标签。此 vcard 条目没有全名或电子邮件信息,但有一个包含我要提取的电子邮件地址的字符串:

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

我在 Linux Mint 上,所以所有命令行工具都可用。任何 google foo 都无济于事。我希望我说清楚了我想要做什么。我也对其他方法持开放态度,可能是对 contacts.vcf 文件进行预处理。感谢您的时间和快乐的绘画

【问题讨论】:

    标签: linux bash extract vcf-vcard


    【解决方案1】:

    你能grep吗?

    grep FN: contacts.vcf
    

    (不确定语法是否正确)

    在某些极端情况下这不起作用,但它应该在大多数情况下都有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-21
      • 1970-01-01
      • 2010-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多