[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: [Bash] Detectar correo en una línea



El Jueves, 16 de Febrero de 2006 20:30, Pedro Insua escribió:
> On Thu, Feb 16, 2006 at 06:15:15PM +0100, Iñaki wrote:
> > Hola, estoy mirando unos manuales sencillitos de sed con ejemplos y demás
> > pues tengo que hacer un script que lea un correo y se quede
> > exclusivamente con la dirección de correo del From limpia (sin <>, sin
> > comillas, sin nada, sólo usuario@dominio.com).
>
> Olá
>
> > Mi script de momento hace esto:
> >
> > ----------------------------------------------------------------
> > #!/bin/bash
> >
> > # Almacenamos en $linea_from toda la línea del "From: ".
> > linea_from=$(formail -X "From:" < correo.txt)
> >
> > # $linea_from puede ser de los siguientes tipos:
> > # From: "Leandro Gao" <leandrogao@dominio.com>
> > # From: =?iso-8859-15?q?leandro= <leandrogao@dominio.com>
> > # From: leandrogao@dominio.com
> >
> > from=comando_quedarse_sólo_con_campo_email   <--esto me falta
> >
> > # Limpiamos los signos <> que pueden aparecer en los extremos del correo:
> > from=$(echo $from  | sed -e 's/[<>]//g')
> > ----------------------------------------------------------------------
> >
> > Como veis  me falta poder quedarme sólo con el campo que tiene una
> > arroba, esa es la condición. Desgraciadamente no encuentro con "sed" el
> > modo de seleccionar un campo de una línea. ¿Sería más apropiado otro
> > comando? ¿awk?
> >
> > Agradezco cualquier ayuda. Estoy aprendiendo un poco más de Bash (que lo
> > tenía muy olvidado) ya que estos días me hace mucha falta.
>
>  Espero que te sirva, lo he probado y funciona.. pero quien sabe :P
>
>
> 	# si la linea contiene "<" grep devuelve '0' , por tanto
> 	# verdadero. Entonces, con el primer `cut' se queda con todo a
> 	# la derecha de "<", y el segundo `cut' con todo a izquierda
> 	# de ">".
> 	#
> 	# si grep devuelve otro valor distinto a '0', `cut' se queda
> 	# con lo que está a la derecha de ":"
>
> 	if [[ `echo $linea_from | grep "<"` ]] ; then
> 	    from="`echo $linea_from | cut -d"<" -f2 | cut -d">" -f1`"
> 	else
> 	    from="`echo $linea_from | cut -d":" -f2`"
> 	fi
>


Muchas gracias Pedro, te comento que no funciona del todo porque falla en los 
casos en los que la línea del From es así:
  
  From: pepe@euskalnet.net (Pepe)
  From: Pepe pepe@euskalnet.net

No obstante prtiendo de tu script voy a intentar modificarlo para que en vez 
de buscar "<" y ">" busque "@" y se quede con los campos adyacentes (el 
nombre y el dominio del correo). A ver si me sale...

Muchas gracias por todo, un saludo.





-- 
y hasta aquí puedo leer...



Reply to: