awk +文字間のEメールアドレスをキャプチャする方法

awk +文字間のEメールアドレスをキャプチャする方法

<と文字の間に長い電子メールリストがあります>

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「行の一致領域のみを印刷」を意味し、-PPerl準拠の正規表現を有効にします。これは\K、「これまでの一致を一致の一部として処理しない」という意味を使用してみましょう。肯定的な見通し。したがって、正規表現は文字<ではなく>文字と一致し、その後に>

これは<foo>電子メールでない場合でも一致します。電子メール(文字列を含む@)のみを制限するには、次のものを使用できます。

grep -Po '<\K[^>]+@[^>]+(?=>)' file 

おすすめ記事