Como posso cortar endereços de e-mail com sed? -- sed campo com text-processing camp askubuntu Relacionado O problema

How can I cut email addresses with sed?


3
vote

problema

português

Eu tenho os seguintes e-mails.txt com:

  tsar@gmail.com c2m_@hotmail.com.es c72@hotmail.com.es.com;es m7_@hotmail.es.com cm_@hotmail.com @pepito.com     

e um comando sed para obter

  sed -n -r '/w+@w+.w+((.w+)*)?/p' emails.txt   tsar@gmail.com cm_@hotmail.com     

Mas, mantém a exibição de email com mais de um .com

Eu não quero esses e-mails:

  c2m_@hotmail.com.es c72@hotmail.com.es.com;es m7_@hotmail.es.com  @pepito.com     

Estou preso aqui e não tenho idéia sobre como obtê-lo.

english

I have the following emails.txt with:

tsar@gmail.com c2m_@hotmail.com.es c72@hotmail.com.es.com;es m7_@hotmail.es.com cm_@hotmail.com @pepito.com  

And a sed command to get

sed -n -r '/\w+@\w+\.\w+((\.\w+)*)?/p' emails.txt   tsar@gmail.com cm_@hotmail.com  

But, it keeps displaying email with more than one .com

I don't want these emails :

c2m_@hotmail.com.es c72@hotmail.com.es.com;es m7_@hotmail.es.com  @pepito.com  

I'm stuck here and I have no clue about how to get it.

     
   
   

Lista de respostas

6
 
vote

com sed , você pode fazer:

  $ sed -nr '/^[^@]+@[^.]+.coms*$/p' file tsar@gmail.com cm_@hotmail.com    

O regex procura um ou mais caracteres não- ABCDEFGHGJKLMNABCDefGHIJKLMN2 no início da linha, em seguida, um @ , então um ou mais não- abcdefghijklmn4 < / Código> Caracteres seguidos por .com e, em seguida, 0 ou mais espaço em branco.


Outras escolhas:

  • perl

      perl -ne 'print if /^[^@]+@[^.]+.coms*$/' file    
  • gnu grep

      grep -P '^[^@]+@[^.]+.coms*$' file    
  • posix grep

      $ sed -nr '/^[^@]+@[^.]+.coms*$/p' file tsar@gmail.com cm_@hotmail.com 0   
  • $ sed -nr '/^[^@]+@[^.]+.coms*$/p' file tsar@gmail.com cm_@hotmail.com 1

      $ sed -nr '/^[^@]+@[^.]+.coms*$/p' file tsar@gmail.com cm_@hotmail.com 2   
 

With sed, you could do:

$ sed -nr '/^[^@]+@[^.]+\.com\s*$/p' file tsar@gmail.com cm_@hotmail.com 

The regex looks for one or more non-@ characters at the beginning of the line, then a @, then one or more non-. characters followed by .com and then 0 or more whitespace.


Other choices:

  • Perl

    perl -ne 'print if /^[^@]+@[^.]+\.com\s*$/' file 
  • GNU grep

    grep -P '^[^@]+@[^.]+\.com\s*$' file 
  • POSIX grep

    grep -E '^[^@]+@[^.]+\.com\s*$' file 
  • awk

    awk '$0~/^[^@]+@[^.]+\.com\s*$/' file 
 
 
         
         
5
 
vote

Eu usaria algo assim:

  $ sed -nr '/^[^@]+@[^.]+.coms*$/p' file tsar@gmail.com cm_@hotmail.com 3   

Recuperará todos os emails no formato $ sed -nr '/^[^@]+@[^.]+.coms*$/p' file tsar@gmail.com cm_@hotmail.com 4

No caso de você precisar de algo mais "universal" e não apenas $ sed -nr '/^[^@]+@[^.]+.coms*$/p' file tsar@gmail.com cm_@hotmail.com 5 mas também $ sed -nr '/^[^@]+@[^.]+.coms*$/p' file tsar@gmail.com cm_@hotmail.com 6 ou abcdefghijklmnabcdefgijklmn17 você pode usar:

  $ sed -nr '/^[^@]+@[^.]+.coms*$/p' file tsar@gmail.com cm_@hotmail.com 8   

Isto irá recuperar todos os emails no formato $ sed -nr '/^[^@]+@[^.]+.coms*$/p' file tsar@gmail.com cm_@hotmail.com 9

 

I would use something like this :

sed -n -r '/\w+@\w+\.com$/p' emails.txt  tsar@gmail.com cm_@hotmail.com 

It will retrieve every email in format user@xxx.com

In case you need something more "universal" and not only .com but also .fr or .uk you can use :

sed -n -r '/\w+@\w+\.\w+$/p' emails.txt 

This will retrieve every email in format user@xxx.xxx

 
 
   
   
3
 
vote

A expressão @0 corresponde sequências adicionais do formulário @1 após o primeiro domínio. Se você quiser corresponder apenas aqueles endereços com um único domínio, você pode impor isso, substituindo-o por abcdefghijklmn22 ou (mais robustamente) abcdefghijklmn23

  @4   

Para exigir que não haja nada (exceto possivelmente espaço em branco) entre o primeiro domínio e o final da linha.

 

The expression ((\.\w+)*)? matches additional sequences of the form .xyz after the first domain. If you want to match only those addresses with a single domain, then you can enforce that by replacing it with $ or (more robustly) \s*$

sed -n -r '/\w+@\w+\.\w+\s*$/p' emails.txt 

to require that there is nothing (except possibly whitespace) between the first domain and the end of the line.

 
 

Perguntas relacionadas

3  Como o AWK pode ser usado para listar contêineres de encaixe?  ( How can awk be used to list docker containers ) 
Estou procurando usar ferramentas ao longo das linhas de: grep sed awk Para trabalhar com o Docker. listando contêineres: docker container ls |...

22  Como substituir espaços por newlines / enter em um arquivo de texto?  ( How to replace spaces with newlines enter in a text file ) 
Eu tenho um arquivo de texto simples chamado "exemplo". Leitura com o comando terminal: cat example Saída: abc cdef ghi jk lmnopq rst uv wxyz Eu ...

2  Apare o início de um arquivo de texto  ( Trim beginning of a text file ) 
Eu tenho um arquivo de texto com espaços inesperados no começo e gostaria de aparar o começo e salvá-lo. Como posso fazer isso? Eu tentei um exemplo muito s...

14  Existe uma maneira, idealmente usando a linha de comando, para converter vários arquivos .csv para uma planilha de multi-folha  ( Is there a way ideally using the command line to convert multiple csv files t ) 
Existe uma maneira, idealmente usando a linha de comando, para converter vários arquivos .csv para uma planilha de multi-folha. Se não houver uma solução CL...

1  Substitua apenas alguns números usando SED [FECHADO]  ( Replace only certain numbers using sed ) 
. fechado . Esta pergunta precisa detalhes ou clareza . Atualmente não está aceitando respostas. ...

2  Sum Coluna 2 do arquivo .csv Se a coluna 1 for a mesma  ( Sum column 2 of csv file if column 1 is the same ) 
Eu tenho um arquivo CSV onde a coluna 1 é o nome de um gene e coluna 2 é um valor associado a esse gene. No entanto, alguns genes têm vários valores e quero s...

5  Analisando um arquivo usando ferramentas de processamento de texto  ( Parsing a file using text processing tools ) 
Um arquivo parece: 1140.271257 0.002288454025 0.002763420728 0.004142512599 0 0 0 0 0 0 0 0 0 0 0 1479.704769 0.00146621631 0.003190634646 0.003672029231 ...

0  Como faço para copiar o conteúdo de um arquivo e concatenamos em um novo arquivo?  ( How do i copy contents of a file and concatenate it into a new file ) 
Eu tenho que fazer novos arquivos que contenham o conteúdo do arquivo original duas vezes e, em seguida, concatenaram a linha por linha. Por exemplo: File ...

4  Remover citações em torno de números inteiros em um arquivo CSV  ( Remove quotes around integers in a csv file ) 
em um grande arquivo csv (& gt; 1 gb) eu tenho algo como "34432", "name", "0", "very long description" Mas em vez disso gostaria de ter 34432, "name...

1  Usando sed para adicionar caracteres no final de uma linha adiciona uma nova linha  ( Using sed to add characters at the end of a line adds a new line ) 
Eu estou fazendo um script para converter algumas varetas mágicas de um formato para outro. Eu preciso inserir o código SET para cada cartão no final da linha...




© 2022 pergunte.org All Rights Reserved. Casa de perguntas e respostas todos os direitos reservados


Licensed under cc by-sa 3.0 with attribution required.