操作系統 Ubuntu 14.04 64位LTS - 最小安裝更新。如何在許多大文件中找到電子郵件
規格: 2個6核Xeon, 12 GB ECC內存, 存儲RAID 10 = 4 TB, 文件系統EXT4 =,
以上服務器是專門爲這個項目。
期望的結果: 使用grep
更有效,得到更少的誤報和「清潔工」的結果和出口僅電子郵件帳戶TXT文件。
概述: 我有各種格式的許多大型文件,的.csv,.excel,txt文件,.SQL等 一些文件被壓縮ZIP,RAR,GZ等。(我會嘗試zgrep
下一步) 這些文件駐留在Windows 2012服務器上,我已將該共享掛載到Ubuntu盒子上,並且我需要將所有電子郵件解壓到txt文件。
我已經完成了大量的研究和玩各種正則表達式,但不能像預期的那樣100%工作。
例子:
第一次嘗試:
grep -Rs .*@.* . >> emails.txt
第二次嘗試:(後研究)
grep -e '^.*\@.*\..*' -r -n -h >> emails.txt
第三次嘗試:(BETT爲呃性能)
LANG=C grep -e '^.*\@.*\..*' -r -n -h >> emails.txt
第四次嘗試:(甚至是 「好」 的表現,但是這取決於硬件)
cat * */* */*/* | parallel --pipe -N 250 --round-robin 「grep -e '^.*\@.*\..*' -r -n -h >> emails.txt"
問題:
隨着第一,第二和第三次嘗試,我仍然得到一噸「垃圾」出口。 與第四個例子cat
仍然抱怨文件夾,我試着用find .
運行它,但後來我只得到在輸出中包含郵件帳戶的文件。
更新: 27/05/2015 - 1:35北京時間
從這個論壇進行更多的測試,並輸入和驚人的社區後,我對下面的解決現在:
的grep +電子郵件的正則表達式示例:
grep -r -o -n -h '[[:alnum:]+\.\_\-]*@[[:alnum:]+\.\_\-]*' . >> emails.txt
grep -r -o -n -h '[[:alnum:]+\.\_\-]*@[[:alnum:]+\.\_\-]*' . >> emails.txt | sort | uniq -i
變化:
grep -ronh '[[:alnum:]+\.\_\-]*@[[:alnum:]+\.\_\-]*' . >> emails.txt
grep -ronh '[[:alnum:]+\.\_\-]*@[[:alnum:]+\.\_\-]*' . >> emails.txt | sort | uniq -i
還在測試/進行:
潛在的速度增加:
LANG=C grep -ronh '[[:alnum:]+\.\_\-]*@[[:alnum:]+\.\_\-]*' . >> emails.txt
LANG=C grep -ronh '[[:alnum:]+\.\_\-]*@[[:alnum:]+\.\_\-]*' . >> emails.txt | sort | uniq -i
管道平行和分裂成多個進程(應增加速度取決於硬件):
cat * */* */*/* | parallel --pipe -N 250 --round-robin 「grep -ronh '[[:alnum:]+\.\_\-]*@[[:alnum:]+\.\_\-]*' >> emails.txt"
cat * */* */*/* | parallel --pipe -N 250 --round-robin 「grep -ronh '[[:alnum:]+\.\_\-]*@[[:alnum:]+\.\_\-]*' >> emails.txt | sort | uniq -i"
管道平行和分裂成多個進程(應增加速度取決於硬件)包括LANG = C:
cat * */* */*/* | parallel --pipe -N 250 --round-robin 「LANG=C grep -ronh '[[:alnum:]+\.\_\-]*@[[:alnum:]+\.\_\-]*' >> emails.txt"
cat * */* */*/* | parallel --pipe -N 250 --round-robin 「LANG=C grep -ronh '[[:alnum:]+\.\_\-]*@[[:alnum:]+\.\_\-]*' >> emails.txt | sort | uniq -i"
會做階段性工作?您最終可以分階段刪除垃圾數據。 – npinti
你在[SO]做了一個很好的研究,祝賀和歡迎!爲了更好地幫助您,我們希望看到您的一些輸入和預期輸出,以便我們可以「玩」它並找到更好的結果。還要注意的是一個正則表達式匹配的電子郵件地址[並非總是很短(http://stackoverflow.com/a/719543/1983854)... – fedorqui
@npinti - 嗨,是的,分階段做,絕對會最好的選擇。 – Mookz