<
と文字の間に長い電子メールリストがあります>
。
smeimebv2t <jdyefc@nsuwtcvc>; jdedyvt <ejd2ydt2@dv2dg2vgv>; didi2jd2m <i2dmi32@hd2vdg >; 3idm23i2m <2udhu2@cdrrc>
.
.
.
awkまたはperl onelinerを使用して間のEメールアドレスのみをキャプチャするにはどうすればよいですか< >
?
例:
more results.out
jdyefc@nsuwtcvc
ejd2ydt2@dv2dg2vgv
i2dmi32@hd2vdg
2udhu2@cdrrc
ベストアンサー1
私が考えることができる最も簡単な方法はGNUを使用することですgrep
。
$ grep -Po '<\K[^>]+(?=>)' file
jdyefc@nsuwtcvc
ejd2ydt2@dv2dg2vgv
i2dmi32@hd2vdg
2udhu2@cdrrc
これは-o
「行の一致領域のみを印刷」を意味し、-P
Perl準拠の正規表現を有効にします。これは\K
、「これまでの一致を一致の一部として処理しない」という意味を使用してみましょう。肯定的な見通し。したがって、正規表現は文字<
ではなく>
文字と一致し、その後に>
。
これは<foo>
電子メールでない場合でも一致します。電子メール(文字列を含む@
)のみを制限するには、次のものを使用できます。
grep -Po '<\K[^>]+@[^>]+(?=>)' file