如何grep多个@类型?


1

我正在使用Linux Centos 6-64。

如何在输入文件夹中更改以下命令,该命令仅检索使用@编写的电子邮件:

grep -E -o -r "[A-Za-z0-9][A-Za-z0-9._%+-]+@[A-Za-z0-9][A-Za-z0-9.-]+\.[A-Za-z]{2,6}" /inputfolder/ | sort | uniq > "/outputfolder/result.txt"

检索下面所有这些@格式的电子邮件?

info@example.com
info@example.com
info(at)example.com
info[at]example.com
info%26%23064%3Bexample.com
info%40example.com

如果可能的话,命令在一行中。谢谢


1
您可以使用组(foo|bar)而不是文字@
slhck

体面的开始。Downvote撤销。
卡米尔·麦克奥托斯基

你好卡米尔,已经格式化了,如果你现在觉得它更愉快,请告诉我。那么你知道在这个命令中需要更新什么吗?谢谢
Joao

提示:要在注释中解决另一个用户,语法就像@KamilMaciorowski。请在此处阅读“回复评论”部分。关键是“你好卡米尔”不会发送任何通知,但“@Kamil”会。
Kamil Maciorowski

1
显然,Joao,你不应该使用(foo|bar),因为这只会匹配一个字面输入foo或者bar。那只是一个例子。你需要更换foo,并bar与针对各自的方案@,你想捕捉。
slhck

Answers:


1

你可以使用-Pperl regex的标志和-i不区分大小写:

grep -Pi "[A-Z0-9][\w.%+-]+(?:@|@|\(at\)|\[at\]|%26%23064%3B|%40)[A-Z0-9][A-Z0-9.-]+\.[A-Z]{2,6}"

\w 代表 [a-zA-Z0-9_]

说明:

[A-Z0-9]            : 1 alphanum
[\w.%+-]+           : 1 or more alphanum, _, ., %, + or -
(?:                 : start non capture group
    @               : literally @
  |                 : OR
    @          : html entity for @
  |                 :
    \(at\)          :
  |                 :
    \[at\]          :
  |                 :
    %26%23064%3B    :
  |                 :
    %40             :
)                   :
[A-Z0-9]            : 1 alphanum
[A-Z0-9.-]+         : 1 or more alphanum, . or -
\.                  : a dot
[A-Z]{2,6}          : 2 upto 6 alpha (be aware that TLDs may have much more characters, see: https://www.iana.org/domains/root/db)

给出示例的结果:

grep -Pi "[A-Z0-9][\w.%+-]+(?:@|@|\(at\)|\[at\]|%26%23064%3B|%40)[A-Z0-9][A-Z0-9.-]+\.[A-Z]{2,6}" file.txt

info@example.com
info@example.com
info(at)example.com
info[at]example.com
info%26%23064%3Bexample.com
info%40example.com

1
@Joao:你必须添加-or选项,这样grep -Pior ....如果你想递归地grep所有文件并只输出匹配的部分。
托托
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.