2013-06-05 125 views
-1

我想从csv文件中提取所有电子邮件地址。 如何做这个动作。 顺便说一句,电子邮件的位置不是按列或按行组织的。从csv文件中提取电子邮件地址

其实也没有正规的格式,但我给你举个例子

"bla bla bla bla Website: www.mysite.com ; Email: [email protected]";usa; 

所以问题是如何提取这句话的电子邮件地址?

+0

我不明白,csv文件往往有“列”...照顾一些样本数据? – Mithrandir

+0

所以你想从文件中提取所有的字符串,其中的字符串是有效的电子邮件地址?请提供示例 – cmh

+0

很难提供建议,而无需看到一些示例输入文件。 –

回答

5

感谢所有; 我发现我的问题的正确答案,那就是:从文件夹的完全csv文件的

grep -E -o "\b[a-zA-Z0-9.-][email protected][a-zA-Z0-9.-]+\.[a-zA-Z0-9.-]+\b" file.csv | sort -u > email_list 
+0

“sort -u”:用于避免在email_list文件中写入重复的电子邮件 “> email_list”:显示的结果将被写入email_list文本文件 –

1

如果需要的话(\[email protected]\S+可能过于简单)请调整正则表达式:

grep -o -P '\[email protected]\S+' input.csv 

man grep

-o, --only-matching 
     Print only the matched (non-empty) parts of a matching line, 
     with each such part on a separate output line. 
-P, --perl-regexp 
     Interpret PATTERN as a Perl regular expression (PCRE, see below). 
     This is highly experimental and grep -P may warn of unimplemented features. 

排序并跳过重复:

grep -o -P '\[email protected]\S+' input.csv | sort -u 
0

提取电子邮件adsress;只是使用Perl

cat *.csv > all.csv 
perl -wne'while(/[\w\.\-][email protected][\w\.\-]+\w+/g){print "$&\n"}' all.csv | sort -u > output.txt 
相关问题