2013-06-05 161 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 
相關問題