como mascarar o endereço de e-mail joebl**@******.*** usando sed / awk / grep / etc [duplicado]

2

Eu tenho alguns e-mails em que gostaria de mascarar todos os caracteres, exceto os dois últimos antes do sinal @, e mascarar tudo depois disso.

Por exemplo:

<[email protected]>

Saída desejada:

<joebl**@******.***>

Até agora, usando perl , tentei:

perl -pe 's/(<.)(.*)(@.)(.*)(.\..*>)/$1."*" x length($2).$3."*" x length($4).$5/e'

mas não está dando os resultados pretendidos.

    
por Dang Tran 12.09.2018 / 14:55

3 respostas

2

$ 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.

    
por 12.09.2018 / 16:10
2

Você pode tentar entender quais são as soluções dadas a esta muito semelhante pergunta significa, e adaptá-los ao seu caso. Eu entendo que se você nunca conheceu Perl antes disso pode ser um grande desafio, no entanto. Então, aqui está sua solução:

echo [email protected] | perl -pe 's#..@(.*)#"**@".$1=~s/[^.]/*/gr#e'
joebl**@*******.***

Agora, vá e aprenda ...

A questão foi editada e os dados de entrada foram alterados. Aqui está uma resposta atualizada:

echo '<[email protected]>' | perl -pe 's#..@(.*)#"**@".$1=~s/[^.>]/*/gr#e'
<joebl**@*******.***>
    
por 12.09.2018 / 16:05
2

Se a obfuscação for sua meta, talvez você não queira dar ao espectador pistas sobre o tamanho da string do domínio e do TLD: tente usar apenas um número fixo de estrelas:

perl -pe 's/..\@.*/**\@******/g'

Atualização com base nos requisitos revisados Eu li os comentários:

email="blah blah <[email protected]> blah blah <[email protected]>"

echo "$email" | perl -pe 's/<.*?\K..\@[^>]+/**\@****/g'
blah blah <joebl**@****> blah blah <ging**@****>

Ou com a ideia de simlev de manter os pontos:

$ perl -pe 's{<.*?\K..\@([^>]+)}{ ($tmp = $1) =~ s/[^.]/*/g; "**\@$tmp" }eg' <<<"$email"
blah blah <joebl**@*******.***> blah blah <ging**@***.****.******>
    
por 12.09.2018 / 16:38