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 [EMAIL PROTECTED]). > > 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" <[EMAIL PROTECTED]> > > # From: =?iso-8859-15?q?leandro= <[EMAIL PROTECTED]> > > # From: [EMAIL PROTECTED] > > > > 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: [EMAIL PROTECTED] (Pepe) From: Pepe [EMAIL PROTECTED] 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...