【问题标题】:grep regex to find emails of a certain tldgrep regex 查找某个 tld 的电子邮件
【发布时间】:2016-10-17 09:45:50
【问题描述】:

我想运行一个 grep 命令来搜索文本文件,并且应该将电子邮件地址与某个 tld 匹配。

例如,如果文本文件包含以下行

tom@google.com
mark@google.com
tom.comber@google.cz

我正在搜索.com tld 电子邮件:

它应该匹配 tom@google.commark@google.com 但不匹配 tom.comber@google.cz

我目前正在使用follow grep 命令,它几乎匹配所有包含.com 的字符串。我希望它专门匹配域的 tld

grep -rnwi "/Users/Me/Desktop/Folder/" -e ".com"

编辑

grep -rnwi '@.+\.com$' "/Users/Me/Desktop/Folder/" 不匹配。但grep -rnwi "/Users/Me/Desktop/Folder/" -e "hotmail.com" 匹配很多。我不想要 hotmail.com 而是所有 .com 电子邮件

EDIT2,这似乎也不匹配。是因为我在一个文件夹中搜索多个文本文件吗?

 grep -rnwi '@.\+\.com$' "/Users/Me/Desktop/Folder/"

EDIT3:并不完全清楚。 .tld 扩展后有字符,所以我不得不去掉尾随的 $。这行得通。

【问题讨论】:

  • 在模式的末尾添加一个$(并用反斜杠或字符类转义点。)即:-e "[.]com$"
  • @stef, -w 选项正在造成问题..您需要它有什么理由吗?

标签: regex grep


【解决方案1】:

做:

grep '@.\+\.com$' file.txt
  • @.\+ 匹配 @ 后跟一个或多个字符
  • \.com$ 匹配最后的文字 .com

要对其他 TLD 执行相同操作,请将末尾的 com 替换为该 TLD。

【讨论】:

  • 我会简单地使用@.+\.com$
  • @ThomasAyoub 在这种情况下更强大,已编辑,谢谢。
  • @stef 不,您需要转义 +,因为它是 ERE 令牌,而不是 BRE。看我的回答。做grep '@.\+\.com$'
  • 嘿,我想我不是很清楚。 .tld 后面还有更多字符。因此,一旦我离开尾随 $,您的正则表达式就起作用了。已接受答案,谢谢!
猜你喜欢
  • 2017-12-24
  • 2011-02-23
  • 1970-01-01
  • 1970-01-01
  • 2013-01-29
  • 2011-04-11
  • 2016-12-10
  • 2015-11-08
  • 2011-03-21
相关资源
最近更新 更多