yae*_*ael 3 sed awk perl text-processing
我在<和>字符之间有很长的电子邮件列表:
smeimebv2t <jdyefc@nsuwtcvc>; jdedyvt <ejd2ydt2@dv2dg2vgv>; didi2jd2m <i2dmi32@hd2vdg >; 3idm23i2m <2udhu2@cdrrc>
.
.
.
Run Code Online (Sandbox Code Playgroud)
我如何使用 awk 或 perl one liner 来仅捕获< >.
例子:
more results.out
jdyefc@nsuwtcvc
ejd2ydt2@dv2dg2vgv
i2dmi32@hd2vdg
2udhu2@cdrrc
Run Code Online (Sandbox Code Playgroud)
ter*_*don 10
我能想到的最简单的方法是使用 GNU grep:
$ grep -Po '<\K[^>]+(?=>)' file
jdyefc@nsuwtcvc
ejd2ydt2@dv2dg2vgv
i2dmi32@hd2vdg
2udhu2@cdrrc
Run Code Online (Sandbox Code Playgroud)
的-o意思是“仅打印线的匹配区域”和-P激活Perl兼容的正则表达式。这些让我们使用\K这意味着“不要将到目前为止匹配的任何内容视为匹配的一部分”和积极的前瞻。因此,正则表达式将匹配 an <,然后是任何一段非>字符,后跟 a >。
请注意,这也将匹配<foo>哪个不是电子邮件。要仅限于电子邮件(带有 的字符串@),您可以使用:
grep -Po '<\K[^>]+@[^>]+(?=>)' file
Run Code Online (Sandbox Code Playgroud)