Thread View: es.comp.os.linux.programacion
18 messages
18 total messages
Started by Bypper
Wed, 03 Jun 2009 06:59
¿Como cortar una expresion regular?
Author: Bypper
Date: Wed, 03 Jun 2009 06:59
Date: Wed, 03 Jun 2009 06:59
38 lines
2180 bytes
2180 bytes
Buenas: Tengo un fichero con lineas de este tipo: "13/12/2006";"COMPRA T.C. EL CORTE INGLES";"13/12/2006";"-37";"1.2e+03";"-6.2e+03";"2e+05";;"0";"-37" Y algunas lineas de este tipo: ;"febrero";"2811.5";"-4155.07";"-1343.57";"831.229999999999" ;"febrero";"0" ;"marzo" ^L etc. bien, el caso es que las del 2� tipo las quiero desechar y procesar unicamente las del primero. Esto lo estoy haciendo procesando las lineas y filtrandolas con egrep y una expresi�n regular, tal que as�: | egrep ^\"[0-9][0-9]\/[0-9][0-9]\/[0-9][0-9][0-9][0-9]\"; de esta manera, extraigo unicamente las que empiezan con una fecha, como est� en el ejemplo, hasta ahi bien, el problema es que hay alguna linea como esta: "27/05/2008";"RECIBO ** PELAYO MUTUA D";"27/05/2008";"-345.48";"608.96";;;;"0";"-345.48" y ahi, la expresi�n regular coge los asteriscos y me muestra todos los ficheros del directorio actual, y mi pregunta es obvia: �como puedo evitar que procese los caracteres que siguen a mi expresion regular y as� evitar este problema? gracias,
Re: ¿Como cortar una expresion regular?
Author: J.A. Gutierrez
Date: Wed, 03 Jun 2009 07:29
Date: Wed, 03 Jun 2009 07:29
38 lines
2471 bytes
2471 bytes
Bypper <bypper@microsoft.com> wrote: : | egrep ^\"[0-9][0-9]\/[0-9][0-9]\/[0-9][0-9][0-9][0-9]\"; esto deberia ser egrep ^\"[0-3][0-9]\/[0-1][0-9]\/[1-2][0-9][0-9][0-9]\"; (y aun se escapan algunas fechas falsas) : de esta manera, extraigo unicamente las que empiezan con una fecha, como : est� en el ejemplo, hasta ahi bien, el problema es que hay alguna linea : como esta: : "27/05/2008";"RECIBO ** PELAYO MUTUA : D";"27/05/2008";"-345.48";"608.96";;;;"0";"-345.48" : y ahi, la expresi�n regular coge los asteriscos y me muestra todos los : ficheros del directorio actual, y mi pregunta es obvia: ????? Una expresion regular por si sola es algo inerte, no puede reemplazar asteriscos ni hacer nada. Tendras que mostrarnos mas detalles del codigo que estas haciendo; pero habitualmente los problemas de expansion de shell se evitan o usando adecuadamente las comillas o haciendo "set -f" (man sh) -- PGP and other useless info at \ http://webdiis.unizar.es/~spd/ \ finger://daphne.cps.unizar.es/spd \ Timeo Danaos et dona ferentes ftp://ivo.cps.unizar.es/pub/ \ (Virgilio)
Re: ¿Como cortar una expresion regular?
Author: Pascal J. Bourguignon
Date: Wed, 03 Jun 2009 07:45
Date: Wed, 03 Jun 2009 07:45
69 lines
3485 bytes
3485 bytes
Bypper <bypper@microsoft.com> writes: > Buenas: > > Tengo un fichero con lineas de este tipo: > > "13/12/2006";"COMPRA T.C. EL CORTE > INGLES";"13/12/2006";"-37";"1.2e+03";"-6.2e+03";"2e+05";;"0";"-37" > > Y algunas lineas de este tipo: > > ;"febrero";"2811.5";"-4155.07";"-1343.57";"831.229999999999" �Oy! �Qu� rico! :-) > ;"febrero";"0" > ;"marzo" > ^L > > etc. > > bien, el caso es que las del 2� tipo las quiero desechar y procesar > unicamente las del primero. Bien. Comparemos: "13/12/2006";"COMPRA T.C. EL CORTE INGLES";"13/12/2006";"-37";"1.2e+03";"-6.2e+03";"2e+05";;"0";"-37" ;"febrero";"2811.5";"-4155.07";"-1343.57";"831.229999999999" "... ;... Entonces para descartar las segundas, basta hacer: grep -v -e '^;' < movimientos.csv # o egrep -v, es igual. > Esto lo estoy haciendo procesando las lineas y filtrandolas con egrep > y una expresi�n regular, tal que as�: > > | egrep ^\"[0-9][0-9]\/[0-9][0-9]\/[0-9][0-9][0-9][0-9]\"; > > de esta manera, extraigo unicamente las que empiezan con una fecha, > como est� en el ejemplo, hasta ahi bien, Vale. > el problema es que hay alguna > linea como esta: > > "27/05/2008";"RECIBO ** PELAYO MUTUA D";"27/05/2008";"-345.48";"608.96";;;;"0";"-345.48" > > y ahi, la expresi�n regular coge los asteriscos y me muestra todos los > ficheros del directorio actual, y mi pregunta es obvia: > > �como puedo evitar que procese los caracteres que siguen a mi > expresion regular y as� evitar este problema? Si no haces tonterias, no deberia occurir. Pero no nos muestras lo que haces realmente, qu� comando das, asi que no podemos decir nada. Los asteriscos son en un archivos, no hay manera si no haces algo muy particular, para que el shell los interprete de ningun manera. -- __Pascal Bourguignon__
Re: ¿Como cortar una expresion regular?
Author: Bypper
Date: Wed, 03 Jun 2009 18:10
Date: Wed, 03 Jun 2009 18:10
55 lines
3187 bytes
3187 bytes
J.A. Gutierrez escribi�: > Bypper <bypper@microsoft.com> wrote: > > : | egrep ^\"[0-9][0-9]\/[0-9][0-9]\/[0-9][0-9][0-9][0-9]\"; > > esto deberia ser > > egrep ^\"[0-3][0-9]\/[0-1][0-9]\/[1-2][0-9][0-9][0-9]\"; > > (y aun se escapan algunas fechas falsas) ok, gracias, aunque no es ese el problema, no tengo que chequear esto > : de esta manera, extraigo unicamente las que empiezan con una fecha, como > : est� en el ejemplo, hasta ahi bien, el problema es que hay alguna linea > : como esta: > > : "27/05/2008";"RECIBO ** PELAYO MUTUA > : D";"27/05/2008";"-345.48";"608.96";;;;"0";"-345.48" > > : y ahi, la expresi�n regular coge los asteriscos y me muestra todos los > : ficheros del directorio actual, y mi pregunta es obvia: > > ????? > > Una expresion regular por si sola es algo inerte, no puede > reemplazar asteriscos ni hacer nada. > > Tendras que mostrarnos mas detalles del codigo que estas > haciendo; pero habitualmente los problemas de expansion de shell > se evitan o usando adecuadamente las comillas o haciendo "set -f" > (man sh) pues lo hace (vaya si lo hace), asi que inerte lo que se dice inerte ... esta linea, por ejemplo, que he puesto antes (lo vuelvo a poner): "27/05/2008";"RECIBO ** PELAYO MUTUA D";"27/05/2008";"-345.48";"608.96";;;;"0";"-345.48" es lo que el c�digo que he puesto antes interpreta extrayendo esto: "27/05/2008";"RECIBO bbk.xls cuentas.sh PELAYO MUTUA D";"27/05/2008";"-345.48";"608.96";;;;"0";"-345.48" despues de recibo aparecen los 2 archivos que tiene el directorio actual, de lo cual se deduce lo que he dicho anteriormente, esta interpretando el/los asteriscos mostrando el contenido del directorio. mi pregunta es simplemente como evito esto, he estado jugando con las comillas sin resultado, problema agravado precisamente por el hecho de que las lineas a procesar tambien tienen comillas. En fin, pues eso.
Re: ¿Como cortar una expresion regular?
Author: Bypper
Date: Wed, 03 Jun 2009 18:21
Date: Wed, 03 Jun 2009 18:21
43 lines
2703 bytes
2703 bytes
Pascal J. Bourguignon escribi�: ... gracias por la respuesta Pascal, te contesto... > > Entonces para descartar las segundas, basta hacer: > > grep -v -e '^;' < movimientos.csv > # o egrep -v, es igual. no vale, las lineas deshechables no siempre comienzan con un ; asi que el unico criterio que creo que vale es filtrar por el formato de fecha completo que he especificado. >> el problema es que hay alguna >> linea como esta: >> >> "27/05/2008";"RECIBO ** PELAYO MUTUA D";"27/05/2008";"-345.48";"608.96";;;;"0";"-345.48" >> >> y ahi, la expresi�n regular coge los asteriscos y me muestra todos los >> ficheros del directorio actual, y mi pregunta es obvia: >> >> �como puedo evitar que procese los caracteres que siguen a mi >> expresion regular y as� evitar este problema? > > Si no haces tonterias, no deberia occurir. Pero no nos muestras lo > que haces realmente, qu� comando das, asi que no podemos decir nada. tonterias ��??? he mostrado el comando, las lineas que proceso y el resultado en el post original, y en la contestaci�n anterior a J.A muestro tambi�n la salida exacta, incluso con datos que no me gustar�a mostrar pero bueno, as� pensaba evitar este tipo de respuestas (sin resultado por lo que veo) > Los asteriscos son en un archivos, no hay manera si no haces algo muy > particular, para que el shell los interprete de ningun manera. bien, pues espero haberte demostrado que no es asi me remito a la respuesta a J.A. para mas detalles. Gracias de nuevo.
Re: ¿Como cortar una expresion regular?
Author: Oscar Garcia
Date: Wed, 03 Jun 2009 19:20
Date: Wed, 03 Jun 2009 19:20
56 lines
3533 bytes
3533 bytes
Bypper escribi�: > pues lo hace (vaya si lo hace), asi que inerte lo que se dice inerte ... > esta linea, por ejemplo, que he puesto antes (lo vuelvo a poner): > "27/05/2008";"RECIBO ** PELAYO MUTUA > D";"27/05/2008";"-345.48";"608.96";;;;"0";"-345.48" > > es lo que el c�digo que he puesto antes interpreta extrayendo esto: > > "27/05/2008";"RECIBO bbk.xls cuentas.sh PELAYO MUTUA > D";"27/05/2008";"-345.48";"608.96";;;;"0";"-345.48" Hola Bypper. Voy a responderte en este post y luego hablar� contigo un poco m�s serio en el post del otro compa�ero que ha querido ayudarte. He intentado reproducir el problema que comentas y tal y como todos esperamos no se producen los efectos que t� nos indicas: redstar@anibal:~/pr$ cat datos.txt "13/12/2006";"COMPRA T.C. EL CORTE INGLES";"13/12/2006";"-37";"1.2e+03";"-6.2e+03";"2e+05";;"0";"-37" ;"febrero";"2811.5";"-4155.07";"-1343.57";"831.229999999999" ;"febrero";"0" ;"marzo" "27/05/2008";"RECIBO ** PELAYO MUTUA D";"27/05/2008";"-345.48";"608.96";;;;"0";"-345.48" redstar@anibal:~/pr$ egrep ^\"[0-9][0-9]\/[0-9][0-9]\/[0-9][0-9][0-9][0-9]\" datos.txt "13/12/2006";"COMPRA T.C. EL CORTE INGLES";"13/12/2006";"-37";"1.2e+03";"-6.2e+03";"2e+05";;"0";"-37" "27/05/2008";"RECIBO ** PELAYO MUTUA D";"27/05/2008";"-345.48";"608.96";;;;"0";"-345.48" �A qu� se debe? A que JAM�S se interpretan los datos de un archivo si no se desea expresamente. Sin embargo si a�ades datos en el archivo de esta manera: redstar@anibal:~/pr$ echo '"27/05/2008";"RECIBO ** PELAYO MUTUA D";"27/05/2008";"-345.48";"608.96";;;;"0";"-345.48"' >> datos.txt Puedes correr el peligro de que se interpreten los datos. En el caso que te he puesto no ser� as�, pero si cometes el error de hacer: redstar@anibal:~/pr$ echo ""27/05/2008";"RECIBO ** PELAYO MUTUA D";"27/05/2008";"-345.48";"608.96";;;;"0";"-345.48"" >> datos.txt Lo que se agregar� es lo que t� dices, los archivos del directorio actual en sustituci�n de "**". Ahora te veo en el siguiente post... Un saludo y suerte. -- �scar Javier Garc�a Baudet LinaresDigital
Re: ¿Como cortar una expresion regular?
Author: Oscar Garcia
Date: Wed, 03 Jun 2009 19:30
Date: Wed, 03 Jun 2009 19:30
57 lines
3854 bytes
3854 bytes
Bypper escribi�:
> Pascal J. Bourguignon escribi�:
>>> �como puedo evitar que procese los caracteres que siguen a mi
>>> expresion regular y as� evitar este problema?
>>
>> Si no haces tonterias, no deberia occurir. Pero no nos muestras lo
>> que haces realmente, qu� comando das, asi que no podemos decir nada.
>
> tonterias ��???
> he mostrado el comando, las lineas que proceso y el resultado en el post
> original, y en la contestaci�n anterior a J.A muestro tambi�n la salida
> exacta, incluso con datos que no me gustar�a mostrar pero bueno, as�
> pensaba evitar este tipo de respuestas (sin resultado por lo que veo)
Te remito a los consejos para un mejor uso de las news que se env�an
peri�dicamente a los grupos ecol.* para hacerte un comentario:
5.8 Del mismo modo, si observa que la respuesta que se le ha dado a
alguien es incorrecta o incompleta, no arremeta contra quien la
envi�.
Lo �nico que tiene que hacer es limitarse a enviar usted su
respuesta, en el modo que piensa que s� es correcto. Recuerde que
nadie deja nunca de aprender y que todos le agradecer�n su
contribuci�n.
Ante todo recuerda que si alguien que intenta ayudarte te dice algo te
lo dice por alg�n motivo, y no por simplemente decirlo.
Si Pascal dice que necesita m�s ejemplos REALES para reproducir tu error
es por alg�n motivo. Yo tambi�n pienso como �l. Piensa que nos cuesta un
esfuerzo extra intentar hacer que el programa falle como te falla a ti
que hacer funcionar bien el programa.
>> Los asteriscos son en un archivos, no hay manera si no haces algo muy
>> particular, para que el shell los interprete de ningun manera.
>
> bien, pues espero haberte demostrado que no es asi
> me remito a la respuesta a J.A. para mas detalles.
Pues parece ser que no, porque en ning�n momento has puesto c�digo
exacto que genere el error que nos comentas. He tenido que deducirlo yo
y es una posible forma de equivocarse, probablemente la que has tenido
t� sea diferente.
> Gracias de nuevo.
De nada.
Si nos mandas el c�digo exacto con el que te ocurren esos problemas
podremos ayudarte mejor a corregirte malos h�bitos e incluso decirte
d�nde te est�s equivocando para que no cometas errores futuros.
Un saludo y suerte.
--
�scar Javier Garc�a Baudet
LinaresDigital
Re: ¿Como cortar una expresion regular?
Author: Jos� Luis P�rez Diez
Date: Thu, 04 Jun 2009 13:00
Date: Thu, 04 Jun 2009 13:00
20 lines
2434 bytes
2434 bytes
In article <hirif6-6oi.ln1@apevia.bersol.sytes.net>, Bypper wrote: > tonterias ��??? Y gordas > he mostrado el comando, las lineas que proceso y el resultado en el post > original, y en la contestaci�n anterior a J.A muestro tambi�n la salida > exacta, incluso con datos que no me gustar�a mostrar pero bueno, as� > pensaba evitar este tipo de respuestas (sin resultado por lo que veo) > Porque no posteas lo que le llega al grep por que en realidad no has mostrado nada yo pruebo en dos maquinas diferentes un arm y ix86 lo que dices que te da problemas y nada el problema es que lo que le llega al grep no es lo que tu crees que le llega mira pruebalo ejecuando lo siguente. (Todo en una linea) echo '"27/05/2008";"RECIBO ** PELAYO MUTUA D";"27/05/2008";"-345.48";"608.96";;;;"0";"-345.48"'| egrep \"[0-9][0-9]\/[0-9][0-9]\/[0-9][0-9][0-9][0-9]\"; -- Los programadores esta ocupados intendtado mejorar los programas a prueba de idiotas. Mientras tanto el universo intenta mejorar los idiotas. El universo va ganando
[OFF-Topic]: Re: ¿Como cortar una expresion regular?
Author: Bypper
Date: Thu, 04 Jun 2009 19:45
Date: Thu, 04 Jun 2009 19:45
42 lines
3328 bytes
3328 bytes
Oscar Garcia escribi�: ... >>> Si no haces tonterias, no deberia occurir. Pero no nos muestras lo >>> que haces realmente, qu� comando das, asi que no podemos decir nada. >> >> tonterias ��??? >> he mostrado el comando, las lineas que proceso y el resultado en el >> post original, y en la contestaci�n anterior a J.A muestro tambi�n la >> salida exacta, incluso con datos que no me gustar�a mostrar pero >> bueno, as� pensaba evitar este tipo de respuestas (sin resultado por >> lo que veo) > > Te remito a los consejos para un mejor uso de las news que se env�an > peri�dicamente a los grupos ecol.* para hacerte un comentario: > 5.8 Del mismo modo, si observa que la respuesta que se le ha dado a > alguien es incorrecta o incompleta, no arremeta contra quien la > envi�. > > Lo �nico que tiene que hacer es limitarse a enviar usted su > respuesta, en el modo que piensa que s� es correcto. Recuerde que > nadie deja nunca de aprender y que todos le agradecer�n su > contribuci�n. > > Ante todo recuerda que si alguien que intenta ayudarte te dice algo te > lo dice por alg�n motivo, y no por simplemente decirlo. > > Si Pascal dice que necesita m�s ejemplos REALES para reproducir tu error > es por alg�n motivo. Yo tambi�n pienso como �l. Piensa que nos cuesta un > esfuerzo extra intentar hacer que el programa falle como te falla a ti > que hacer funcionar bien el programa. Gracias Oscar, lo primero pido disculpas he ofendido a alguien desde ahora. Como justificaci�n decir que conozco las normas de nettiqueta y entiendo que deben aplicarse a todos, tanto el que pregunta como el que responde. Si se repasan mis respuestas, no creo haber faltado al respeto a nadie, si acaso mi tono ha sido un tanto despectivo, tal y como he interpretado que se ha sido conmigo. No he omitido nada de forma voluntaria sino porque me ha parecido que no era trascendente, corrijo el error.
Re: ¿Como cortar una expresion regular?
Author: Bypper
Date: Thu, 04 Jun 2009 19:45
Date: Thu, 04 Jun 2009 19:45
47 lines
3199 bytes
3199 bytes
Hola Oscar, gracias por tu respuesta y cortesia, te contesto m�s
adelante ...
Oscar Garcia escribi�:
...
> He intentado reproducir el problema que comentas y tal y como todos
> esperamos no se producen los efectos que t� nos indicas:
>
> redstar@anibal:~/pr$ cat datos.txt
> "13/12/2006";"COMPRA T.C. EL CORTE
> INGLES";"13/12/2006";"-37";"1.2e+03";"-6.2e+03";"2e+05";;"0";"-37"
> ;"febrero";"2811.5";"-4155.07";"-1343.57";"831.229999999999"
> ;"febrero";"0"
> ;"marzo"
> "27/05/2008";"RECIBO ** PELAYO MUTUA
> D";"27/05/2008";"-345.48";"608.96";;;;"0";"-345.48"
>
> redstar@anibal:~/pr$ egrep
> ^\"[0-9][0-9]\/[0-9][0-9]\/[0-9][0-9][0-9][0-9]\" datos.txt
> "13/12/2006";"COMPRA T.C. EL CORTE
> INGLES";"13/12/2006";"-37";"1.2e+03";"-6.2e+03";"2e+05";;"0";"-37"
> "27/05/2008";"RECIBO ** PELAYO MUTUA
> D";"27/05/2008";"-345.48";"608.96";;;;"0";"-345.48"
>
> �A qu� se debe? A que JAM�S se interpretan los datos de un archivo si no
> se desea expresamente.
>
> Sin embargo si a�ades datos en el archivo de esta manera:
> redstar@anibal:~/pr$ echo '"27/05/2008";"RECIBO ** PELAYO MUTUA
> D";"27/05/2008";"-345.48";"608.96";;;;"0";"-345.48"' >> datos.txt
>
> Puedes correr el peligro de que se interpreten los datos. En el caso que
> te he puesto no ser� as�, pero si cometes el error de hacer:
> redstar@anibal:~/pr$ echo ""27/05/2008";"RECIBO ** PELAYO MUTUA
> D";"27/05/2008";"-345.48";"608.96";;;;"0";"-345.48"" >> datos.txt
>
> Lo que se agregar� es lo que t� dices, los archivos del directorio
> actual en sustituci�n de "**".
El c�digo completo es el siguiente:
xls2csv -c';'-g2 $FILE | grep -v ^$ | while read L
do
echo $L | egrep ^\"[0-3][0-9]\/[0-1][0-9]\/[1-2][0-9][0-9][0-9]\";
done
jurar�a que es pr�cticamente lo mismo que has puesto tu, sin embargo, se
interpreta como he descrito. Soy incapaz de ver el matiz que lo diferencia.
Re: ¿Como cortar una expresion regular?
Author: Bypper
Date: Thu, 04 Jun 2009 19:52
Date: Thu, 04 Jun 2009 19:52
27 lines
2328 bytes
2328 bytes
Bypper escribi�: ... >> Puedes correr el peligro de que se interpreten los datos. En el caso >> que te he puesto no ser� as�, pero si cometes el error de hacer: >> redstar@anibal:~/pr$ echo ""27/05/2008";"RECIBO ** PELAYO MUTUA >> D";"27/05/2008";"-345.48";"608.96";;;;"0";"-345.48"" >> datos.txt >> >> Lo que se agregar� es lo que t� dices, los archivos del directorio >> actual en sustituci�n de "**". > > El c�digo completo es el siguiente: > > xls2csv -c';'-g2 $FILE | grep -v ^$ | while read L > do > echo $L | egrep ^\"[0-3][0-9]\/[0-1][0-9]\/[1-2][0-9][0-9][0-9]\"; > done > > jurar�a que es pr�cticamente lo mismo que has puesto tu, sin embargo, se > interpreta como he descrito. Soy incapaz de ver el matiz que lo diferencia. vale, ahora lo veo: echo "$L" | egrep ^\"[0-3][0-9]\/[0-1][0-9]\/[1-2][0-9][0-9][0-9]\"; las comillas dobles sobre la propia variable solucionan el problema. Gracias a todos.
Re: ¿Como cortar una expresion regular?
Author: Pascal J. Bourguignon
Date: Thu, 04 Jun 2009 23:52
Date: Thu, 04 Jun 2009 23:52
79 lines
4701 bytes
4701 bytes
Bypper <bypper@microsoft.com> writes:
> Hola Oscar, gracias por tu respuesta y cortesia, te contesto m�s
> adelante ...
> Oscar Garcia escribi�:
> ...
>> He intentado reproducir el problema que comentas y tal y como todos
>> esperamos no se producen los efectos que t� nos indicas:
>> redstar@anibal:~/pr$ cat datos.txt
>> "13/12/2006";"COMPRA T.C. EL CORTE
>> INGLES";"13/12/2006";"-37";"1.2e+03";"-6.2e+03";"2e+05";;"0";"-37"
>> ;"febrero";"2811.5";"-4155.07";"-1343.57";"831.229999999999"
>> ;"febrero";"0"
>> ;"marzo"
>> "27/05/2008";"RECIBO ** PELAYO MUTUA
>> D";"27/05/2008";"-345.48";"608.96";;;;"0";"-345.48"
>> redstar@anibal:~/pr$ egrep
>> ^\"[0-9][0-9]\/[0-9][0-9]\/[0-9][0-9][0-9][0-9]\" datos.txt
>> "13/12/2006";"COMPRA T.C. EL CORTE
>> INGLES";"13/12/2006";"-37";"1.2e+03";"-6.2e+03";"2e+05";;"0";"-37"
>> "27/05/2008";"RECIBO ** PELAYO MUTUA
>> D";"27/05/2008";"-345.48";"608.96";;;;"0";"-345.48"
>> �A qu� se debe? A que JAM�S se interpretan los datos de un archivo
>> si no se desea expresamente.
>> Sin embargo si a�ades datos en el archivo de esta manera:
>> redstar@anibal:~/pr$ echo '"27/05/2008";"RECIBO ** PELAYO MUTUA
>> D";"27/05/2008";"-345.48";"608.96";;;;"0";"-345.48"' >> datos.txt
>> Puedes correr el peligro de que se interpreten los datos. En el caso
>> que te he puesto no ser� as�, pero si cometes el error de hacer:
>> redstar@anibal:~/pr$ echo ""27/05/2008";"RECIBO ** PELAYO MUTUA
>> D";"27/05/2008";"-345.48";"608.96";;;;"0";"-345.48"" >> datos.txt
>> Lo que se agregar� es lo que t� dices, los archivos del directorio
>> actual en sustituci�n de "**".
>
> El c�digo completo es el siguiente:
�Mejor!
> xls2csv -c';'-g2 $FILE | grep -v ^$ | while read L
> do
> echo $L | egrep ^\"[0-3][0-9]\/[0-1][0-9]\/[1-2][0-9][0-9][0-9]\";
Aqu� ^^ tienes el problema.
Cuando usas variables en el shell, deberias siempre poner las entre "
echo "$L"
Igualmente, [0-3] es una expression interpretada por el shell. Tienes
suerte con una regex tan complicada que las probabilidad de tener un
archivo correspondiente sera baja, pero con una mas simple, podrias
tambien tener el problema a este nivel. Nota que el ; que tienes, es
interpretado por el shell como separador de comando, no como parte del
argumento a egrep. Asi que es mejor poner argumentos fijos (sin
variables) entre '
| egrep '^"[0-3][0-9]/[0-1][0-9]/[1-2][0-9][0-9][0-9]";'
> done
>
> jurar�a que es pr�cticamente lo mismo que has puesto tu, sin embargo,
> se interpreta como he descrito. Soy incapaz de ver el matiz que lo
> diferencia.
El matiz es que no hay razon para usar un bucle while aqu�. Todos
hemos pensado que hacias mas bien algo asi:
xls2csv -c';'-g2 "$FILE" | grep -e '^"[0-3][0-9]/[0-1][0-9]/[1-2][0-9][0-9][0-9]";'
^ ^ siempre poner los "
No es raro en sistemas como MacOSX u otros unix usados con un GUI,
tener espacios y otros caracterios especiales en nombres de archivos y
directorios.
--
__Pascal Bourguignon__
Re: ¿Como cortar una expresion regular?
Author: Alias
Date: Fri, 05 Jun 2009 19:41
Date: Fri, 05 Jun 2009 19:41
3 lines
1473 bytes
1473 bytes
Realmente, o yo no lo estoy entendiento o algo pasa... ¿¿¿Las líneas que quieres desechar no son las que empiezan por ; o ^ ???
Re: ¿Como cortar una expresion regular?
Author: Pascal J. Bourguignon
Date: Fri, 05 Jun 2009 19:51
Date: Fri, 05 Jun 2009 19:51
11 lines
2124 bytes
2124 bytes
Alias <jcarmena@gmail.com> writes: > Realmente, o yo no lo estoy entendiento o algo pasa... > ���Las l�neas que quieres desechar no son las que empiezan por ; o > ^ ??? No hay l�neas empiezando por '^' ; '^' es un caracterio especial por las regexp que significa el principio de la l�nea. -- __Pascal Bourguignon__
Re: ¿Como cortar una expresion regular?
Author: Alias
Date: Fri, 05 Jun 2009 20:22
Date: Fri, 05 Jun 2009 20:22
22 lines
2103 bytes
2103 bytes
On 5 jun, 21:51, p...@informatimago.com (Pascal J. Bourguignon) wrote: > Alias <jcarm...@gmail.com> writes: > > Realmente, o yo no lo estoy entendiento o algo pasa... > > ¿¿¿Las líneas que quieres desechar no son las que empiezan por ; o > > ^ ??? > > No hay líneas empiezando por '^' ; '^' es un caracterio especial por > las regexp que significa el principio de la línea. > > -- > __Pascal Bourguignon__ Bypper dijo que quería desechar las líneas de este tipo: ;"febrero";"2811.5";"-4155.07";"-1343.57";"831.229999999999" ;"febrero";"0" ;"marzo" ^L (copiado tal cual) yo lo estoy viendo muy claramente, comienzan por ;
Re: ¿Como cortar una expresion regular?
Author: Alias
Date: Fri, 05 Jun 2009 20:26
Date: Fri, 05 Jun 2009 20:26
33 lines
2451 bytes
2451 bytes
On 5 jun, 22:22, Alias <jcarm...@gmail.com> wrote:
> On 5 jun, 21:51, p...@informatimago.com (Pascal J. Bourguignon) wrote:
>
> > Alias <jcarm...@gmail.com> writes:
> > > Realmente, o yo no lo estoy entendiento o algo pasa...
> > > ¿¿¿Las líneas que quieres desechar no son las que empiezan por ; o
> > > ^ ???
>
> > No hay líneas empiezando por '^' ; '^' es un caracterio especial por
> > las regexp que significa el principio de la línea.
>
> > --
> > __Pascal Bourguignon__
>
> Bypper dijo que quería desechar las líneas de este tipo:
>
> ;"febrero";"2811.5";"-4155.07";"-1343.57";"831.229999999999"
> ;"febrero";"0"
> ;"marzo"
> ^L
>
> (copiado tal cual)
> yo lo estoy viendo muy claramente, comienzan por ;
Pero es igual:
Si las que quiere desechar comienzan con ; y ^ sería:
| egrep '^[^;^]'
Si no, se ve claramente que las que quiere desechar no tienen /
| egrep '/'
Re: ¿Como cortar una expresion regular?
Author: Oscar Garcia
Date: Fri, 05 Jun 2009 21:31
Date: Fri, 05 Jun 2009 21:31
43 lines
3249 bytes
3249 bytes
Alias escribi�: > Pero es igual: > Si las que quiere desechar comienzan con ; y ^ ser�a: > | egrep '^[^;^]' > Si no, se ve claramente que las que quiere desechar no tienen / > | egrep '/' Entonces dejar� pasar una l�nea del estilo: ;"Chaleco negro/gris";"21.5";"-415.07";"-1343.57";"831.23" Por ponerte un ejemplo. > Tengo un fichero con lineas de este tipo: > "13/12/2006";"COMPRA T.C. EL CORTE > INGLES";"13/12/2006";"-37";"1.2e+03";"-6.2e+03";"2e+05";;"0";"-37" > Y algunas lineas de este tipo: > ;"febrero";"2811.5";"-4155.07";"-1343.57";"831.229999999999" > ;"febrero";"0" > ;"marzo" > etc. > bien, el caso es que las del 2� tipo las quiero desechar y procesar > unicamente las del primero. Como bien dices �l ped�a filtrar el segundo tipo de l�neas, pero viendo los ejemplos se ve claro que lo que realmente busca es filtrar aquellas que tienen como primer campo una fecha con su estructura (dos d�gitos de d�a, mes y cuatro de a�o). Imagina que alg�n programa o aplicaci�n en vez de dejar en blanco el campo lo rellena con una cadena vac�a o con un espacio en blanco si no elimina espacios sobrantes a la derecha y/o izquierda del lugar de donde obtiene ese dato (el teclado por ejemplo): " ";"Chaleco negro/gris";"21.5";"-415.07";"-1343.57";"831.23" Tambi�n pasar�a como correcta eliminando todo lo que empiece por ;. Yo creo que ha optado bien por filtrar por el formato de fecha. Un saludo. -- �scar Javier Garc�a Baudet LinaresDigital
Re: ¿Como cortar una expresion regular?
Author: Alias
Date: Fri, 05 Jun 2009 21:55
Date: Fri, 05 Jun 2009 21:55
55 lines
3720 bytes
3720 bytes
On 5 jun, 23:31, Oscar Garcia <redstarQUITARSPA...@terra.es> wrote: > Alias escribió: > > > Pero es igual: > > Si las que quiere desechar comienzan con ; y ^ sería: > > | egrep '^[^;^]' > > Si no, se ve claramente que las que quiere desechar no tienen / > > | egrep '/' > > Entonces dejará pasar una línea del estilo: > ;"Chaleco negro/gris";"21.5";"-415.07";"-1343.57";"831.23" > > Por ponerte un ejemplo. > > > Tengo un fichero con lineas de este tipo: > > "13/12/2006";"COMPRA T.C. EL CORTE > > INGLES";"13/12/2006";"-37";"1.2e+03";"-6.2e+03";"2e+05";;"0";"-37" > > Y algunas lineas de este tipo: > > ;"febrero";"2811.5";"-4155.07";"-1343.57";"831.229999999999" > > ;"febrero";"0" > > ;"marzo" > > etc. > > bien, el caso es que las del 2º tipo las quiero desechar y procesar > > unicamente las del primero. > > Como bien dices él pedía filtrar el segundo tipo de líneas, pero viendo > los ejemplos se ve claro que lo que realmente busca es filtrar aquellas > que tienen como primer campo una fecha con su estructura (dos dígitos de > día, mes y cuatro de año). > > Imagina que algún programa o aplicación en vez de dejar en blanco el > campo lo rellena con una cadena vacía o con un espacio en blanco si no > elimina espacios sobrantes a la derecha y/o izquierda del lugar de donde > obtiene ese dato (el teclado por ejemplo): > " ";"Chaleco negro/gris";"21.5";"-415.07";"-1343.57";"831.23" > > También pasaría como correcta eliminando todo lo que empiece por ;. > > Yo creo que ha optado bien por filtrar por el formato de fecha. > > Un saludo. > > -- > Óscar Javier García Baudet > LinaresDigital Hombre, yo me atengo a lo que él ha puesto: 2 tipos de líneas, hay que ser prácticos y se ve claramente que lo de las segundas líneas no son chalecos, sino meses :P jeje, pero bueno, se cura en salud. Saludos.
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads