【问题标题】:How to use sed or awk or grep to find an email in a file that starts with the word "abuse"?如何使用 sed 或 awk 或 grep 在以“abuse”开头的文件中查找电子邮件?
【发布时间】:2018-08-30 07:48:02
【问题描述】:

Ubuntu 16.04
GNU bash,版本 4.4.0

我需要将电子邮件提取到以单词 abuse 开头的文件中。 这是一个包含 IP 地址的 whois 信息的文件,其中包含电子邮件 abuse@web.ad.jp

% [whois.apnic.net]
% Whois data copyright terms    http://www.apnic.net/db/dbcopyright.html

% Information related to '121.92.0.0 - 121.93.255.255'

% Abuse contact for '121.92.0.0 - 121.93.255.255' is 'hostmaster@nic.ad.jp'

inetnum:        121.92.0.0 - 121.93.255.255
netname:        InfoWeb
descr:          FUJITSU LIMITED
descr:          17-25, SHINKAMATA 1-CHOME, OTA-KU,
descr:          TOKYO 144-8588, JAPAN
country:        JP
admin-c:        JNIC1-AP
tech-c:         JNIC1-AP
status:         ALLOCATED PORTABLE
remarks:        Email address for spam or abuse complaints abuse@web.ad.jp
mnt-by:         MAINT-JPNIC
mnt-irt:        IRT-JPNIC-JP
mnt-lower:      MAINT-JPNIC
last-modified:  2015-12-01T22:23:26Z
source:         APNIC

irt:            IRT-JPNIC-JP
address:        Urbannet-Kanda Bldg 4F, 3-6-2 Uchi-Kanda
address:        Chiyoda-ku, Tokyo 101-0047, Japan
e-mail:         hostmaster@nic.ad.jp
abuse-mailbox:  hostmaster@nic.ad.jp
admin-c:        JNIC1-AP
tech-c:         JNIC1-AP
auth:           # Filtered
mnt-by:         MAINT-JPNIC
last-modified:  2017-10-18T10:21:54Z
source:         APNIC

我不关心哪个命令从文件中提取了 abuse@web.ad.jp 的电子邮件地址,我只关心它是否有效。

过去我使用 grep 来查找文件中的所有电子邮件地址,例如 ...

grep -o '[[:alnum:]+\.\_\-]*@[[:alnum:]+\.\_\-]*' "$1" | sort | uniq -i

但绝不是一封以单词开头的电子邮件,所以我预期的命令输出会产生我 abuse@web.ad.jp

【问题讨论】:

  • @Curious Sam,请在您的帖子中添加您必须解决问题的努力,然后让我们知道。
  • grep -o abuse@.* <filename>
  • @RavinderSingh13 我通常这样做,我正在编辑我的 OP 以包含我过去用来查找所有电子邮件地址的 grep 命令,然后错过了回家并决定告诉我她的工作之夜多么可怕。它发生了,我在那里道歉。
  • @devd 你的回复正好给了我我需要的东西,而且效果很好,但是这段时间是什么时候?
  • 这里你甚至不需要[a-z0-9]*,只要grep -m 1 -ioE 'abuse@[^[:blank:]]+' file就够了。

标签: bash awk sed


【解决方案1】:
$ grep "abuse[a-z]*@[a-z\.]\+" -o <filename>

假设您的电子邮件不包含数字或大写字母。

【讨论】:

  • 如果email id 是abuse23 怎么办?这对所有人都有用:grep -i -o 'abuse[a-z0-9]*@[a-z\.]\+' &lt;filename&gt;
  • @devd 我看到一些带有单引号的俄罗斯滥用电子邮件,绕过了您的最新回复。如果您有时间展示如何将其包含在内,那就太好了。
  • @CuriousSam 这可能有助于grep -i -o "abuse\('\)\?[a-z0-9]*\('\)\?@[a-z\.]\+" &lt;filename&gt;。抱歉耽搁了。
  • @devd 马上!!
猜你喜欢
  • 1970-01-01
  • 2015-06-13
  • 1970-01-01
  • 2018-12-16
  • 1970-01-01
  • 2015-10-12
  • 2017-06-11
  • 2020-01-20
  • 1970-01-01
相关资源
最近更新 更多