我想从csv文件中提取所有电子邮件地址。 怎么做这个动作。 顺便说一句,电子邮件的位置不是按列或按行组织的。
实际上没有常规格式,但我举一个例子
"bla bla bla bla Website: www.mysite.com ; Email: information@email.com";usa;
所以问题是如何从这句话中提取电子邮件地址?
答案 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