Foros del Web » Administración de Sistemas » Unix / Linux »

expresiones regulares

Estas en el tema de expresiones regulares en el foro de Unix / Linux en Foros del Web. hola, tengo en un fichero esto: nombre=juan,apellido=pepe nombre=pepe,apellido=menganito ... y asi sucesivamente, quiero pasar a un fichero aparte solo nombre=x como creen que seria la ...
  #1 (permalink)  
Antiguo 17/10/2005, 08:14
Avatar de drulic
Usuario baneado!
 
Fecha de Ingreso: abril-2005
Mensajes: 174
Antigüedad: 19 años
Puntos: 0
expresiones regulares

hola, tengo en un fichero esto:

nombre=juan,apellido=pepe
nombre=pepe,apellido=menganito
...
y asi sucesivamente, quiero pasar a un fichero aparte solo nombre=x

como creen que seria la mejor forma de hacerlo.

thank!.
  #2 (permalink)  
Antiguo 17/10/2005, 08:42
Avatar de -Defero-
Colaborador
 
Fecha de Ingreso: julio-2004
Ubicación: Guipúzcoa
Mensajes: 4.776
Antigüedad: 19 años, 9 meses
Puntos: 76
No preguntó alguien algo muy parecido hace poco? Yo al menos me estuve comiendo la cabeza como un negao. Aprendí un par de cosas interesantes.

Por cierto, no entiendo del todo qué es lo que quieres. ¿Quieres que sólo aparezca el campo "nombre"? ¿Quieres que cambie el campo "nombre" por equis y mantenga el campo "apellido"? Veamos... si tú tienes esta lista:

Nombre: Pepe, Apellido: Pérez
Nombre: Juan, Apellido: Márquez
Nombre: Luis, Apellido: Robledo

Qué resultado quieres? Esto?

Nombre: XXX, Apellido: Pérez
Nombre: XXX, Apellido: Márquez
Nombre: XXX, Apellido: Robledo

O tal vez quieres esto:

Nombre: Pepe
Nombre: Juan
Nombre: Luis

O esto otro:

Nombre: XXX, Apellido: XXX
Nombre: XXX, Apellido: XXX
Nombre: XXX, Apellido: XXX

O quizás ninguna de las opciones mencionadas?
__________________
abogado en Errenteria + procuradora en San Sebastián = equipo imparable
  #3 (permalink)  
Antiguo 17/10/2005, 08:55
Avatar de drulic
Usuario baneado!
 
Fecha de Ingreso: abril-2005
Mensajes: 174
Antigüedad: 19 años
Puntos: 0
jeje, si fui yo, y se me olvidó contestarte que funciono de lujo. En este caso lo que quiero hacer es la tercera opción que has puesto:

Nombre=pepe
Nombre=juan
Nombre=pepito
...

he estado haciendo mil pruebas, pero no consigo sacarlo.
  #4 (permalink)  
Antiguo 17/10/2005, 09:07
Avatar de -Defero-
Colaborador
 
Fecha de Ingreso: julio-2004
Ubicación: Guipúzcoa
Mensajes: 4.776
Antigüedad: 19 años, 9 meses
Puntos: 76
Simplemente sustituye todo lo que aparece a partir de ", Apellido" (inclusive) por un espacio en blanco. Un ejemplo:

[dan@dan Desktop]$ cat archivo.txt
Nombre: Pepe, Apellido: Pérez
Nombre: Juan, Apellido: Márquez
Nombre: Luis, Apellido: Robledo

[dan@dan Desktop]$ cat archivo.txt | sed -s 's/, Apellido: [A-z]*/ /g' > archivo2.txt

[dan@dan Desktop]$ cat archivo2.txt
Nombre: Pepe
Nombre: Juan
Nombre: Luis

Si en vez de cambiarlo por un espacio quieres que directamente lo borre, hazlo asíí, sin dejar espacio entre las dos últimas barras:

cat archivo.txt | sed -s 's/, Apellido: [A-z]*//g' > archivo2.txt

Por cierto, para quien tenga curiosidad, el anterior tema en el que se trató un tema similar es éste
__________________
abogado en Errenteria + procuradora en San Sebastián = equipo imparable
  #5 (permalink)  
Antiguo 22/10/2005, 10:30
Avatar de -Defero-
Colaborador
 
Fecha de Ingreso: julio-2004
Ubicación: Guipúzcoa
Mensajes: 4.776
Antigüedad: 19 años, 9 meses
Puntos: 76
Ahora soy yo quien pregunta acerca de las expresiones regulares.

Veréis, al cabo de la semana recibo varios e-mails en cadena, de esos que arrastran las direcciones de correo de todas las personas que los han recibido, y me he planteado el reto de extraer de mis mensajes todas las direcciones de correo electrónico de manera automática. Necesito realizar tres pasos:

- Filtrar las direcciones de correo electrónico y volcarlas a un archivo.
- Ordenar alfabéticamente las direcciones de correo
- Eliminar las repetidas

Y más o menos he encontrado el modo de realizar los tres pasos:

cat archivodeorigen | grep -o [A-Za-z0-9_\-\.]*@[A-Za-z0-9]*\.[A-Za-z0-9]* > listadirecciones

sort < listadirecciones > listaordenada

uniq listaordenada > listasinrepetidos

Y esto me da la friolera de más de 2300 direcciones de correo electrónico distintas extraídas de 79 mensajes que tengo en una de mis carpetas de Evolution.

La cuestión es que revisando la lista me encuentro con un montón de supuestas direcciones de correo que en realidad no lo son. Por ejemplo:

2dd88ed4@arantzaa>
3Djlaguado@groupe-bel
3Djorge.toirac@movi-net
7f253453@part7

Además en algunas direcciones se ha seleccionado como parte de la misma un punto y coma (;), cosa que creo que no debería haber hecho. En el criterio que he utilizado no debería tener cabida el punto y coma, ya que he restringido los caracteres a letras de la A a la Z (en mayúsculas o minúsculas), cifras del 0 al 9, puntos (.), guiones (-), y guiones bajos (_). Además en el dominio de la dirección de correo (lo que viene después de la arroba) debería aparecer por fuerza un punto (.), y en caso contrario descartarse la cadena de texto, pero algunas de las supuestas direcciones de correo no contienen un punto después de la arroba.

Alguien sabría explicarme el motivo? He estado leyendo sobre expresiones regulares, pero no termino de encontrar el fallo. Muchas gracias
__________________
abogado en Errenteria + procuradora en San Sebastián = equipo imparable

Última edición por -Defero-; 22/10/2005 a las 10:36
  #6 (permalink)  
Antiguo 22/10/2005, 10:48
Avatar de -Defero-
Colaborador
 
Fecha de Ingreso: julio-2004
Ubicación: Guipúzcoa
Mensajes: 4.776
Antigüedad: 19 años, 9 meses
Puntos: 76
Mwa-ha-ha-ha... lo he solucionado!! Era algo tan simple como envolver la expresión regular con comillas, de esa manera no incluye en el resultado nada que vaya pegado a la cadena que coincida con el criterio. Es decir, el primero de los tres pasos queda así:

cat archivodeorigen | grep -o "[A-Za-z0-9_\-\.]*@[A-Za-z0-9]*\.[A-Za-z0-9]*" > listadirecciones

Así que la lista queda reducida de más de 2300 a 2146. He eliminado alrededor de 200 resultados erróneos.

Por cierto, ya que estamos... ¿sabéis qué otros caracteres pueden formar parte de una dirección de correo electrónico aparte de los listados? Es decir, aparte de letras de la A a la Z, números del 0 al 9, puntos (.), guiones (-), y guiones bajos (_).
__________________
abogado en Errenteria + procuradora en San Sebastián = equipo imparable

Última edición por -Defero-; 22/10/2005 a las 10:53
  #7 (permalink)  
Antiguo 22/10/2005, 13:41
 
Fecha de Ingreso: enero-2004
Mensajes: 276
Antigüedad: 20 años, 2 meses
Puntos: 0
Una cosa defero, esa expresión no permitiría direcciones como:
@. ??

Saludos
  #8 (permalink)  
Antiguo 22/10/2005, 13:51
Avatar de -Defero-
Colaborador
 
Fecha de Ingreso: julio-2004
Ubicación: Guipúzcoa
Mensajes: 4.776
Antigüedad: 19 años, 9 meses
Puntos: 76
Pues por lo visto sí, más o menos. He creado un archivo de nombre "texto.txt", con el siguiente contenido:

[email protected]
@.??



Y el resultado es el siguiente:

[dan@dan Desktop]$ cat texto.txt
[email protected]
@.??
[dan@dan Desktop]$ cat texto.txt | grep -o "[A-Za-z0-9_\-\.]*@[A-Za-z0-9]*\.[A-Za-z0-9]*"
[email protected]
@.


Alguna sugerencia?
__________________
abogado en Errenteria + procuradora en San Sebastián = equipo imparable
  #9 (permalink)  
Antiguo 22/10/2005, 15:04
 
Fecha de Ingreso: enero-2004
Mensajes: 276
Antigüedad: 20 años, 2 meses
Puntos: 0
Qué tal con:

grep -o "[A-Za-z0-9_\-\.][A-Za-z0-9_\-\.]*@[A-Za-z0-9][A-Za-z0-9_\-\.]*\.[A-Za-z0-9][A-Za-z0-9_\-\.]*" ??

Saludos
  #10 (permalink)  
Antiguo 22/10/2005, 15:14
Avatar de -Defero-
Colaborador
 
Fecha de Ingreso: julio-2004
Ubicación: Guipúzcoa
Mensajes: 4.776
Antigüedad: 19 años, 9 meses
Puntos: 76
Muchas gracias, de esa manera funciona a la perfección.
__________________
abogado en Errenteria + procuradora en San Sebastián = equipo imparable
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:41.