A maneira mais simples de pensar é usar o GNU grep
:
$ grep -Po '<\K[^>]+(?=>)' file
jdyefc@nsuwtcvc
ejd2ydt2@dv2dg2vgv
i2dmi32@hd2vdg
2udhu2@cdrrc
O -o
significa "apenas imprimir região correspondente da linha" e o -P
ativa expressões regulares compatíveis com Perl. Isso nos permite usar \K
, o que significa "não considerar nada comparado a este ponto como parte da correspondência" e positivo lookaheads . Assim, a regex corresponderá a <
e, em seguida, a qualquer trecho de caracteres não >
seguidos por >
.
Observe que isso também corresponderá a <foo>
, que não é um e-mail. Para restringir apenas para e-mails (strings com @
), você pode usar:
grep -Po '<\K[^>]+@[^>]+(?=>)' file