Regex 从文本文件中提取电子邮件
我尝试通过以下方式从文本文件中提取电子邮件:Regex 从文本文件中提取电子邮件,regex,linux,grep,debian,Regex,Linux,Grep,Debian,我尝试通过以下方式从文本文件中提取电子邮件: grep -o ‘[0-9a-zA-Z-_]*@[0-9a-zA-Z-_.]*.[a-zA-Z]*’ infile > outfile.txt 但是,结果是: grep: Invalid range end 我不知道为什么 有人能帮忙吗? 谢谢,连字符必须是字符类中的第一个或最后一个字符,以避免转义。如果连字符出现在中间,则被认为是一个范围。 试试这个grep: grep -oE '[0-9a-zA-Z_-]+@[0-9a-zA-Z_.-]
grep -o ‘[0-9a-zA-Z-_]*@[0-9a-zA-Z-_.]*.[a-zA-Z]*’ infile > outfile.txt
但是,结果是:
grep: Invalid range end
我不知道为什么
有人能帮忙吗?
谢谢,连字符必须是字符类中的第一个或最后一个字符,以避免转义。如果连字符出现在中间,则被认为是一个范围。 试试这个grep:
grep -oE '[0-9a-zA-Z_-]+@[0-9a-zA-Z_.-]+\.[a-zA-Z]+' infile > outfile.txt
另外,你的报价看起来很可疑,我也变了。你需要避开这个点。我认为您需要在char类之后添加
+
,而不是*
很棒的anubhava!谢谢有没有可能用一个文件夹(包含许多文件,如infle)来做同样的思考呢?是的,你可以用grep-olE'[0-9a-zA-Z-]+@[0-9a-zA-Z-]+\.[a-zA-Z]+'*
来列出文件夹中不同文件中所有匹配的电子邮件。这里的范围无效:Z-
。你需要跳出破折号:Z\-\ucode>。此外,点
在正则表达式中是一个“match all”字符。我猜你想从字面上匹配它,所以你也需要逃避它。