Como remover parte do domínio de cada linha do arquivo de texto contendo endereços de e-mail

Como remover parte do domínio de cada linha do arquivo de texto contendo endereços de e-mail

Eu tenho um arquivo de texto com um endereço de e-mail por linha. Como posso remover a parte do domínio, mas não a parte do TLD de cada linha? Aqui, definiríamos TLD como o último elemento da string após o último caractere de ponto.

Em outras palavras, amostra de entrada:

[email protected]
[email protected]
[email protected]
[email protected]

Saída desejada:

foobar@org
john.smith@com
chunkylover69@dk
qwerty@uk

Responder1

$ sed 's/@.*[.]/@/' file
foobar@org
john.smith@com
chunkylover69@dk
qwerty@uk

A regex @.*[.]captura tudo, desde @o último período .da linha. Nós substituímos isso por @.

Responder2

Usandoperl

perl -pe 's/(@).*\.(.*)$/\1\2/' foo

ou embutido

perl -i -pe 's/(@).*\.(.*)$/\1\2/' foo

Exemplo

$ cat foo
[email protected]
[email protected]
[email protected]
[email protected]

$ perl -pe 's/(@).*\.(.*)$/\1\2/' foo
foobar@org
john.smith@com
chunkylover69@dk
qwerty@uk

Explicação RegEx

/(@).*\.(.*)$/

  • 1º Grupo de Captura ( @)

    @corresponde ao personagem @literalmente

  • .*corresponde a qualquer caractere (exceto nova linha)

    Quantificador: *Entre zero e vezes ilimitadas, quantas vezes for possível, retribuindo conforme necessário [ganancioso]

    \.corresponde ao personagem .literalmente

  • 2º Grupo de Captura ( .*)

    .*corresponde a qualquer caractere (exceto nova linha)

    Quantificador: *Entre zero e vezes ilimitadas, quantas vezes for possível, retribuindo conforme necessário [ganancioso]

  • $afirmar a posição no final da string

Visualização de expressão regular

Demonstração de Debuggex

Responder3

Usando awkvocê pode fazer assim

$awk '{ sub(/\@.*\./,"@"); print }' file


foobar@org
john.smith@com
chunkylover69@dk
qwerty@uk

Usando subSubstituto (localizar e substituir), você pode procurar um padrão e substituí-lo.

informação relacionada