Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 从文本文件中提取电子邮件_Regex_Linux_Grep_Debian - Fatal编程技术网

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”字符。我猜你想从字面上匹配它,所以你也需要逃避它。