从csv文件中提取电子邮件地址

时间:2013-06-05 14:00:39

标签: linux shell

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

实际上没有常规格式,但我举一个例子

 "bla bla bla bla Website: www.mysite.com ; Email: information@email.com";usa; 

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

3 个答案:

答案 0 :(得分:7)

谢谢大家; 我找到了问题的正确答案,它是:

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

答案 1 :(得分:1)

如果需要,请调整正则表达式(\S+@\S+可能太简单了):

grep -o -P '\S+@\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 '\S+@\S+' input.csv | sort -u

答案 2 :(得分:0)

从充满csv文件的文件夹中提取电子邮件地址;只使用perl

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