Article View: es.comp.os.linux.programacion
Article #357Re: ¿Como cortar una expresion regular?
From: 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__
Technical Details
Message-ID:
<87ljo7eevt.fsf@galatea.local>Path:
arc1-ca.pugleaf.net!g2news2.google.com!news4.google.com!feeder.news-service.com!feeder.ecngs.de!ecngs!feeder2.ecngs.de!212.27.60.7.MISMATCH!feeder1-1.proxad.net!proxad.net!feeder1-2.proxad.net!cleanfeed1-a.proxad.net!nnrp18-1.free.fr!not-for-mailReferences:
<pjjhf6-dqd.ln1@apevia.bersol.sytes.net> <h058o1$tct$1@aioe.org> <otqif6-6ji.ln1@apevia.bersol.sytes.net> <h06ide$jbt$1@cormoran.emeteo.local> <hsklf6-0kg.ln1@apevia.bersol.sytes.net>Show Full Headers
Complete Article Headers
X-Google-Language: SPANISH,ASCII
Path: arc1-ca.pugleaf.net!g2news2.google.com!news4.google.com!feeder.news-service.com!feeder.ecngs.de!ecngs!feeder2.ecngs.de!212.27.60.7.MISMATCH!feeder1-1.proxad.net!proxad.net!feeder1-2.proxad.net!cleanfeed1-a.proxad.net!nnrp18-1.free.fr!not-for-mail
Newsgroups: es.comp.os.linux.programacion
Subject: Re: ¿Como cortar una expresion regular?
Face: iVBORw0KGgoAAAANSUhEUgAAADAAAAAwAQMAAABtzGvEAAAABlBMVEUAAAD///+l2Z/dAAAA
oElEQVR4nK3OsRHCMAwF0O8YQufUNIQRGIAja9CxSA55AxZgFO4coMgYrEDDQZWPIlNAjwq9
033pbOBPtbXuB6PKNBn5gZkhGa86Z4x2wE67O+06WxGD/HCOGR0deY3f9Ijwwt7rNGNf6Oac
l/GuZTF1wFGKiYYHKSFAkjIo1b6sCYS1sVmFhhhahKQssRjRT90ITWUk6vvK3RsPGs+M1RuR
mV+hO/VvFAAAAABJRU5ErkJggg==
X-Accept-Language: fr, es, en
X-Disabled: X-No-Archive: no
References: <pjjhf6-dqd.ln1@apevia.bersol.sytes.net> <h058o1$tct$1@aioe.org> <otqif6-6ji.ln1@apevia.bersol.sytes.net> <h06ide$jbt$1@cormoran.emeteo.local> <hsklf6-0kg.ln1@apevia.bersol.sytes.net>
From: pjb@informatimago.com (Pascal J. Bourguignon)
Date: Fri, 05 Jun 2009 01:52:06 +0200
Message-ID: <87ljo7eevt.fsf@galatea.local>
Organization: Informatimago
User-Agent: Gnus/5.1008 (Gnus v5.10.8) Emacs/22.3 (darwin)
Cancel-Lock: sha1:NzRmOTRkNTE5Y2Y0MWFmNDU2NDBjZGMyYTg1NzVhMTliZGE1ZDMzMw==
MIME-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Lines: 79
NNTP-Posting-Date: 05 Jun 2009 01:52:08 MEST
NNTP-Posting-Host: 88.182.134.169
X-Trace: 1244159528 news-1.free.fr 28972 88.182.134.169:54872
X-Complaints-To: abuse@proxad.net