2012-08-02 65 views
2

我有一個包含大量垃圾的電子郵件地址的文本文件。 我需要分開電子郵件地址,並將每個地址寫入單獨的行(或用逗號分隔)。使用tsch從文本文件中分離電子郵件地址

文本文件看起來像這樣:

[email protected]איריתשנהב;רוניאשכול99; מרכזהאולפן99; דפניאלפר; תיםרון; ([email protected])אי​​נהדגן9303; ([email protected])אי​​לןדור9406; 9304אורי

我認爲要抓住所有以[A-Z]開頭並以[A-Z]結尾的單詞,因爲所有垃圾都不是英文字母([A-Z])。

有人可以告訴我如何寫這個腳本?

回答

3

我會這樣做,使用grep -o。它不完全在「in」中,但是你可以在任何腳本中使用grep。 -o選項會導致grep僅返回由正則表達式匹配的文本。

看起來您的輸入文件當前使用分號分隔記錄。這一點很重要,因爲grep可以逐行讀取內容。因此,我們將使用tr以換行符替換記錄分隔符,以確保grep可以看到每條記錄。

[email protected]> cat strip_email 
#!/bin/tcsh 

setenv inputfile emails.txt 
setenv re_email '[[:alnum:]][[:alnum:]_%=+-]*@([[:alnum:]]([[:alnum:]-])+\.)+[[:alnum:]]{2,}' 

tr ';' '\n' < $inputfile | grep -Eo "$re_email" 

[email protected]> ./strip_email 
[email protected] 
[email protected] 
[email protected] 
[email protected]> 

你可以調整正則表達式適合你。在unix或linux系統上,您可以檢查手冊頁:re_format(7)regex(7)以獲取文檔。在那裏記錄[:alnum:]件,以及isalnum

+0

對於'setenv re_email ....'+1,特別是使用posix和個別字符的混合字符類。 – shellter 2012-08-02 19:14:36

+0

非常感謝你!效果很好。獲得我的充分讚賞。 – 2012-08-02 20:39:52

+0

@MinorBalulu - 好東西。還有一個複選標記,也許? (在答案的左邊) – ghoti 2012-08-06 19:17:25

相關問題