$ perl -pe 's/(.*)(..)(@)(.*)(\.)(.*)(>)/$1."*" x length($2).$3."*" x length($4).$5 ."*" x length($6).$7/e' file
<joebl**@*******.***>
Nunca usei perl
, mas posso percorrer meu caminho até a regex.
Corresponda qualquer caractere quantas vezes for possível:
(.*)
Combine dois caracteres:
(..)
Símbolo literal @
(@)
Literal .
(\.)
Em seguida, substitua esses jogos por algo. Queremos manter o primeiro grupo (os primeiros 5 caracteres), basta imprimir:
$1
E imprima *
para cada caractere encontrado no segundo grupo:
"*" x length($2)
O resto segue de forma semelhante.