如果之前已经问过并回答了这个问题,我很抱歉。我找不到任何东西。
如何使用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' *
。这不起作用,所以归结为只是让我的正则表达式错误。
答案 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 ./