使用linux grep查找电子邮件

时间:2017-07-19 00:28:37

标签: regex linux grep

如果之前已经问过并回答了这个问题,我很抱歉。我找不到任何东西。

如何使用linux grep / regex在电子邮件地址中查找未知字符?例如,假设我们有这个列表:

  

userone:123456@example.com

     

usertwo:123@example.com

     

userthree:12@example.com

我怎么能在列表中找到匹配***@example.com的电子邮件? (唯一应该从中找到的电子邮件是123@example.com)

我知道grep -e '...@example\.com'可以使用,但句点可以代表grep中的任何字符,因此这样做也会找到:12@example.com。此外,MOST电子邮件地址不包含任何字符,它们通常仅限于字母,数字,句号和下划线(许多电子邮件提供商不允许任何其他内容)

我需要在grep中使用除句点符号之外的其他内容,例如[a-Z0-9._],以便包含字母,数字,句点和下划线,但不包含任何其他内容。我不确定如何解决这个问题。谢谢

编辑:到目前为止我尝试过的事情: grep -e '[a-zA-Z0-9_.]{3}@example.com' *。这不起作用,所以归结为只是让我的正则表达式错误。

2 个答案:

答案 0 :(得分:1)

如果电子邮件地址的前面总是有用户名,然后是冒号或空格,然后是电子邮件地址,则可以使用该知识限制匹配。

用户名是什么样的?您需要知道是否要使用它来查找匹配项。我们现在说它是字母,数字,短划线和下划线,它总是以字母开头,长度为2到12个字符。我们也知道它后面有一个冒号或空格。正则表达式是

[A-Za-z][A-Za-z0-9_-]{1,11}[: ]

接下来是您的电子邮件地址,听起来是您决定并输入的内容,因为这是您当前正在寻找的内容。

test*****@example.com的例子是

[A-Za-z][A-Za-z0-9_-]{1,11}[: ]test.\+@example.com

或者,如果"测试"

之后恰好有5个字符
[A-Za-z][A-Za-z0-9_-]{1,11}[: ]test.....@example.com

您的原始样本***@example.com是" example.com"上的任何3-char地址并将

[A-Za-z][A-Za-z0-9_-]{1,11}[: ]...@example.com

要一直重新键入该前缀会很麻烦,因此您希望将其包含在使用prefix + what_i_typed作为模式的脚本中。

答案 1 :(得分:0)

尝试使用此命令行,我曾经在任何文件中找到任何东西

 grep -r -i @example.com ./