首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >删除vCard文件中的重复记录

删除vCard文件中的重复记录
EN

Stack Overflow用户
提问于 2018-06-10 00:28:49
回答 1查看 187关注 0票数 -4

我有一个vCard文件,里面有成千上万个联系人的记录。此文件已损坏,已为每个用户添加了个人电话、工作和额外记录的副本。

我怎样才能清理重复的东西?

代码语言:javascript
复制
BEGIN:VCARD
VERSION:3.0
N:Doe;John;Q.,Public
FN;CHARSET=UTF-8:John Doe
TEL;TYPE=WORK,VOICE:(111) 555-1212
TEL;TYPE=WORK,VOICE:(111) 555-1212
TEL;TYPE=WORK,VOICE:(111) 555-1212
TEL;TYPE=WORK,VOICE:(111) 555-1212
TEL;TYPE=HOME,VOICE:(404) 555-1212
TEL;TYPE=HOME,VOICE:(404) 555-1212
TEL;TYPE=HOME,VOICE:(404) 555-1212
TEL;TYPE=HOME,TYPE=VOICE:(404) 555-1213
TEL;TYPE=HOME,TYPE=VOICE:(404) 555-1213
TEL;TYPE=HOME,VOICE:(404) 555-1212
TEL;TYPE=HOME,VOICE:(404) 555-1212
TEL;TYPE=HOME,VOICE:(404) 555-1212
TEL;TYPE=HOME,TYPE=VOICE:(404) 555-1213
TEL;TYPE=HOME,TYPE=VOICE:(404) 555-1213
TEL;TYPE=HOME,TYPE=VOICE:(404) 555-1213
TEL;TYPE=HOME,TYPE=VOICE:(404) 555-1213
EMAIL;TYPE=PREF,INTERNET:forrestgump@example.com
EMAIL;TYPE=INTERNET:example@example.com
EMAIL;TYPE=PREF,INTERNET:forrestgump@example.com
EMAIL;TYPE=PREF,INTERNET:forrestgump@example.com
EMAIL;TYPE=PREF,INTERNET:forrestgump@example.com
EMAIL;TYPE=PREF,INTERNET:forrestgump@example.com
EMAIL;TYPE=INTERNET:example@example.com
EMAIL;TYPE=INTERNET:example@example.com
EMAIL;TYPE=INTERNET:example@example.com
EMAIL;TYPE=INTERNET:example@example.com
EMAIL;TYPE=INTERNET:example@example.com
EMAIL;TYPE=PREF,INTERNET:forrestgump@example.com
EMAIL;TYPE=PREF,INTERNET:forrestgump@example.com
EMAIL;TYPE=PREF,INTERNET:forrestgump@example.com
EMAIL;TYPE=PREF,INTERNET:forrestgump@example.com
EMAIL;TYPE=PREF,INTERNET:forrestgump@example.com
ADR;TYPE=HOME:;;42 Plantation St.;Baytown;LA;30314;United States of America
URL:https://www.google.com/
PHOTO;VALUE=URL;TYPE=PNG:http://upload.wikimedia.org/wikipedia/commons/thumb/a/a5/Example_svg.svg/200px-Example_svg.svg.png
AGENT:BEGIN:VCARD
 VERSION:3.0
 N:Doe;John;Q.,Public
 FN:John Doe
 TEL;TYPE=WORK,VOICE:(111) 555-1212
 TEL;TYPE=HOME,VOICE:(404) 555-1212
 TEL;TYPE=HOME,TYPE=VOICE:(404) 555-1213
 EMAIL;TYPE=PREF,INTERNET:forrestgump@example.com
 EMAIL;TYPE=INTERNET:example@example.com
 PHOTO;VALUE=URL;TYPE=PNG:http://upload.wikimedia.org/wikipedia/commons/thumb/a/a5/Example_svg.svg/200px-Example_svg.svg.png
 END:VCARD
END:VCARD

我使用了在StackOverflow中看到的以下解决方案,但它没有解决问题,因为并不是所有的重复项都连续出现。

代码语言:javascript
复制
perl -ne 'print unless (defined($prev) && ($_ eq $prev)); $prev=$_'

结果是:

代码语言:javascript
复制
...
TEL;TYPE=WORK,VOICE:(111) 555-1212
TEL;TYPE=HOME,TYPE=VOICE:(404) 555-1213
TEL;TYPE=WORK,VOICE:(111) 555-1212
TEL;TYPE=HOME,TYPE=VOICE:(404) 555-1213
TEL;TYPE=WORK,VOICE:(111) 555-1212
TEL;TYPE=HOME,TYPE=VOICE:(404) 555-1213
EMAIL;TYPE=PREF,INTERNET:forrestgump@example.com
EMAIL;TYPE=INTERNET:example@example.com
EMAIL;TYPE=PREF,INTERNET:forrestgump@example.com
EMAIL;TYPE=INTERNET:example@example.com
EMAIL;TYPE=PREF,INTERNET:forrestgump@example.com
EMAIL;TYPE=INTERNET:example@example.com
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-10 02:18:25

删除所有重复行的最简单方法是

代码语言:javascript
复制
perl -ne 'print if !$seen{$_}++'

如果您想单独处理每个BEGIN:VCARD部分,

代码语言:javascript
复制
perl -ne '%seen = () if /\bBEGIN:VCARD\b/; print if !$seen{$_}++'
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50776329

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档