Извлечение имени и информации электронной почты из файла vcard (* .vcf) - PullRequest
0 голосов
/ 11 марта 2019

Я экспортировал файл vcard (* .vcf) из моих контактов в Google.Теперь я хотел бы извлечь информацию из FN: (полное имя) и любую информацию об адресе электронной почты (EMAIL * или любую строку с @).Я дал рубину, питону и ударил.Самым многообещающим до сих пор был подход с bash.Вот скрипт, который у меня есть от Github , но он не работает должным образом.Я считаю, что это останавливается, когда FN: информация недоступна, что происходит примерно с 50 записями в конце файла vcard.Я все еще хотел бы информацию об адресе электронной почты, которая может быть в поле «Примечание» или даже где-то еще.Вот сценарий:

#!/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

Из следующегоvcard Я не получаю никакой информации, потому что нет ключевого слова EMAIL.Я все еще хотел бы извлечь строку с информацией @ и поместить где-нибудь тэг "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, поэтому доступны все инструменты командной строки.Любой гугл фу был безрезультатным.Надеюсь, я дал понять, что я пытаюсь сделать.Я также открыт для других подходов, возможно, предварительно обработав файл contacts.vcf.Спасибо за ваше время и счастливую картину

1 Ответ

0 голосов
/ 13 марта 2019

Не могли бы вы grep это?

grep FN: contacts.vcf

(не уверен, что синтаксис правильный)

В некоторых крайних случаях это не сработает, но в большинстве случаев должно работать.

...