2014-10-09 106 views
1

我嘗試從文本文件中提取電子郵件:提取電子郵件

grep -o ‘[0-9a-zA-Z-_]*@[0-9a-zA-Z-_.]*.[a-zA-Z]*’ infile > outfile.txt 

但是,結果是:

grep: Invalid range end 

我不知道爲什麼......

有人可以幫忙嗎? 謝謝

+1

這裏有無效範圍:'Z-_'。你需要逃避破折號:'Z \ -'。此外,點「。」在正則表達式中是「全部匹配」字符。我想你想從字面上匹配它,所以你也需要逃避它。 – tiguchi 2014-10-09 14:52:01

回答

1

連字符需要是字符類中的第一個或最後一個字符以避免轉義。如果連字號出現在中間,那麼它被認爲是一個範圍。

試試這個grep的:

grep -oE '[0-9a-zA-Z_-][email protected][0-9a-zA-Z_.-]+\.[a-zA-Z]+' infile > outfile.txt 

而且您的報價看起來很可疑,我已經改變了。

+3

你需要避開點。我認爲你需要在char類之後加上'+'而不是'*' – 2014-10-09 14:49:19

+0

啊,沒錯,現在就糾正它。謝謝。 – anubhava 2014-10-09 14:53:47

+0

非常棒的anubhava!謝謝 !是否有可能做同樣的想法,但有一個文件夾(內容很多文件像infile)? – Macbernie 2014-10-09 15:01:58