<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="95e0e6f0e7acd5e1fae1f9bbf0edf4f8e5f9f0bbf6faf8" rel="noreferrer noopener nofollow">[email protected]</a>>, size=35020827, class=-30, nrcpts=1, msgid=<2m96JLQblfm/fh.01u3YnFYK0bc3pmOExg2vA.totl.example.com>, proto=ESMTP, daemon=MTA-v6, relay=lemur.totl.example.com
<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="7500061007444435061d1a1058171412065b100d14180519105b161a18" rel="noreferrer noopener nofollow">[email protected]</a>>, size=18071179, class=-30, nrcpts=1, msgid=<BhaYKoWuhDhrUQcT5.+tF6eKTCu0459KjSflNxLg.shoe-bags.example.com>, proto=ESMTP, daemon=MTA-v6, relay=dog.shoe-bags.example.com
<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="e095938592d2d3a09394858c8c8192cd908194928f8cce8598818d908c85ce838f8d" rel="noreferrer noopener nofollow">[email protected]</a>>, size=27057917, class=-30, nrcpts=1, msgid=<VaD1xW8SduAYImck.Mbx1MBcKTjBPlQpcaDhJRA.stellar-patrol.example.com>, proto=ESMTP, daemon=MTA-v6, relay=feinstein.stellar-patrol.example.com
<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="552026302763152539343b302178302d25273026267b302d34382539307b363a38" rel="noreferrer noopener nofollow">[email protected]</a>>, size=15212380, class=-30, nrcpts=1, msgid=<4wN8i90XT.BIdywWoKxNjeEM1q.planet-express.example.com>, proto=ESMTP, daemon=MTA-v6, relay=fry.planet-express.example.com
<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="0376706671323a43616f6260686e6670622d667b626e736f662d606c6e" rel="noreferrer noopener nofollow">[email protected]</a>>, size=44656174, class=-30, nrcpts=1, msgid=<1froj29vndf7h0.Qzoi+1hDEQOVp1frnQvWO.blackmesa.example.com>, proto=ESMTP, daemon=MTA-v6, relay=barney.blackmesa.example.com
<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="364345534404764542535a5a57441b46574244595a18534e575b465a531855595b" rel="noreferrer noopener nofollow">[email protected]</a>>, size=4556372, class=-30, nrcpts=1, msgid=<jnugzy+Z.L82rx1mhoSXi0RmK/yNP.stellar-patrol.example.com>, proto=ESMTP, daemon=MTA-v6, relay=feinstein.stellar-patrol.example.com
<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="9beee8fee9acdbf6faf8e9f4f3fae9ffb5fee3faf6ebf7feb5f8f4f6" rel="noreferrer noopener nofollow">[email protected]</a>>, size=35391498, class=-30, nrcpts=1, msgid=<fXr7+HM1U7ZpbJqxf.iJs6q9r.macrohard.example.com>, proto=ESMTP, daemon=MTA-v6, relay=corporate-mail-01.macrohard.example.com
<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="2a5f594f581d6a464b5d4b444e4b044f524b475a464f04494547" rel="noreferrer noopener nofollow">[email protected]</a>>, size=46296174, class=-30, nrcpts=1, msgid=<UJHE3Y4uEn.JBT3RESrNYL+fH5dFTGt5A.lawanda.example.com>, proto=ESMTP, daemon=MTA-v6, relay=achilles.lawanda.example.com
<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="f085839582c1c4b0969594949984de9588919d809c95de939f9d" rel="noreferrer noopener nofollow">[email protected]</a>>, size=12197030, class=-30, nrcpts=1, msgid=<gpq6lYSHHC67d.ZjyKUitfcPwOlA/OEc++.feddit.example.com>, proto=ESMTP, daemon=MTA-v6, relay=kittin.feddit.example.com
我希望只提取每行的电子邮件地址部分,例如 [email protected]
我目前正在使用这种技术:
cat file | grep -o 'user.*?com'
但是,由于“.com”位于行尾,有时我仍然会返回整行。
我的示例输出应类似于:
<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="d5a0a6b0a7ec95a1baa1b9fbb0adb4b8a5b9b0fbb6bab8" rel="noreferrer noopener nofollow">[email protected]</a>
<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="d6a3a5b3a4e7e796a5beb9b3fbb4b7b1a5f8b3aeb7bba6bab3f8b5b9bb" rel="noreferrer noopener nofollow">[email protected]</a>
<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="d6a3a5b3a4e4e596a5a2b3babab7a4fba6b7a2a4b9baf8b3aeb7bba6bab3f8b5b9bb" rel="noreferrer noopener nofollow">[email protected]</a>
... etc
这怎么可能?非常感谢您的帮助
最佳答案
这应该做:
grep -o 'user[^[:space:]]\+\.com' file
观察我不需要 cat
在这里。
这使用字符类 [:space:]
。我的意思是,我想要以 user
开头的所有内容。 ,以 .com
结尾并且在 ( [^[:space:]]\+
) 之间仅包含非空格字符(且至少一个)。
关于您的解决方案:您需要 -P
切换为grep
使用 Perl 的正则表达式,这样 .*?
被解释为非贪婪地匹配任何东西:
grep -Po 'user.*?com' file
可以。
现在我希望您没有任何客人发送电子邮件 <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="2e5b5d4b5c1a1c6e4d4141424d41435e4f494057004d4143" rel="noreferrer noopener nofollow">[email protected]</a>
或类似的,否则这个会在这里失败,因为你只会得到 user42@coolcom
:(
使用正则表达式解析电子邮件地址根本不是一项简单的任务。
关于Bash grep 在第一个匹配处停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19745604/