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!.
| ||||
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? |
| ||||
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. |
| ||||
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 |
| ||||
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 Última edición por -Defero-; 22/10/2005 a las 10:36 |
| ||||
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 (_). Última edición por -Defero-; 22/10/2005 a las 10:53 |
| ||||
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? |