2014-10-09 83 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