【问题标题】:Use linux grep to find emails使用 linux grep 查找电子邮件
【发布时间】:2017-12-24 01:11:29
【问题描述】:

如果之前有人问过并回答过这个问题,我深表歉意。我找不到任何东西。

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

userone:123456@example.com

usertwo:123@example.com

userthree:12@example.com

如何通过 grep 查找与 ***@example.com 匹配的电子邮件? (应该从中找到的唯一电子邮件是 123@example.com)

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

除了 grep 中的句点符号之外,我还需要使用其他东西,例如 [a-Z0-9._] 以便包含字母、数字、句点和下划线,但仅此而已。我不确定该怎么做。谢谢

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

【问题讨论】:

  • 您是否正在寻找一个正则表达式来匹配任何大小写字符、数字、句点或下划线?
  • 如果需要匹配文字句点,可以用反斜杠转义:\.。您的问题似乎与正则表达式基础有关。我建议查看regular-expressions.info 等信息网站或在 regex101.com 上进行试验。
  • 是的,但在这个例子中只有 3 个字符,所以我可以用别的东西代替“...”
  • 真实邮箱地址可以,其实可以包含any字符;不要将其与大多数地方“通常”所做的混淆。我通常在电子邮件地址中有+。见regular-expressions.info/email.html
  • 那么grep '123@example.com' 怎么样。你不需要任何正则表达式。

标签: regex linux grep


【解决方案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 字符地址”,并且是

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

一直重新键入该前缀会很痛苦,因此您需要将其包装在使用 prefix + what_i_typed 作为模式的脚本中。

【讨论】:

    【解决方案2】:

    试试这个命令行,我曾经在任何文件中找到任何东西

     grep -r -i @example.com ./
    

    【讨论】:

    • 在我的示例中,这将找到所有 3 封电子邮件,而不仅仅是 123@example.com。
    • @BotHam - 你没有很好地描述你想用这个完成什么。如果您只想匹配123,只需按字面意思搜索grep -F 123@example.com ...,但这不是真正您想要的。你必须更好地描述你所追求的。
    • 我编辑了我的问题,希望这能让问题更清楚。很抱歉有任何混淆。
    猜你喜欢
    • 2011-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-07
    • 2020-07-28
    • 1970-01-01
    • 2017-06-13
    • 1970-01-01
    相关资源
    最近更新 更多