Linux en Espanol
 
Sint?xis expresiones regulares 'sed' (tema #24211)
Publicar nuevo tema  Responder al tema    Foros de discusión -> Programación
Autor Mensaje
torkupo
Forista
Registrado: 2012-01-06
Mensajes: 2

Publicado: 2012-01-06 10:49:43    Asunto: Sint?xis expresiones regulares 'sed'

Hola a todos, ?ste es mi primer tema publicado y espero que salga bi?n.
La consulta es sobre la sint?xis de expresiones regulares en 'sed' . Les comento que particularmente el problema que deseo resolver es el siguiente:
tengo un archivo (archivo.datos) el cual tiene el formato

[code:1:fe9d276b03].144234
-.425345
-1.2342
1.15125
[/code:1:fe9d276b03]
es una sola columna en la cual hay un solo valor por fila; todos son decimales y est?n separados por '.' , los n?mero que comienzan con '0' sean tanto positivos como negativos no tienen el '0' (tal cual como est? en el ejemplo).

Mi intenci?n es reemplazar los '.' por ',' , puntos por comas. Tambi?n que aquellos numeros que comiencen con '0', el cual no aparece, tengan expl?citamente el '0', por ejemplo:
antes: .1234
despues: 0,1234

Mi soluci?n parcial es la siguiente:
[code:1:fe9d276b03]sed 's/\./\,/;s/\-,/\-0,/' archivo.datos[/code:1:fe9d276b03]
comando que da como resultado:
[code:1:fe9d276b03]
,144234
-0,425345
-1,2342
1,15125[/code:1:fe9d276b03]
Como se ve, lo ?nico que me falta es que el valor ,144234 tenga un cero adelante de la coma, 0,144234. He intentado varias posibilidades [code:1:fe9d276b03]sed 's/[-+]?[0-9]*\.?[0-9]/[-+]?[0-9]\,?[0-9]/'[/code:1:fe9d276b03] pero con resultados no deseados. Alguien puede ayudarme?. Gracias por adelantado!
miguelgf
Forista


Registrado: 2006-12-28
Mensajes: 621

Publicado: 2012-01-06 11:35:51    Asunto:

Hola.

?Te valdr?a as??
[code:1:f2a3d6d0e8]sed 's/\./\,/;s/\-,/\-0,/;s/^,/0,/' archivo.datos[/code:1:f2a3d6d0e8]

Entrada:
[code:1:f2a3d6d0e8].144234
-.425345
-1.2342
1.15125[/code:1:f2a3d6d0e8]

Salida:
[code:1:f2a3d6d0e8]0,144234
-0,425345
-1,2342
1,15125[/code:1:f2a3d6d0e8]

Lo ?nico que he a?adido es que si encuentra una l?nea que empieza por coma, le ponga un cero:
[code:1:f2a3d6d0e8]s/^,/0,/[/code:1:f2a3d6d0e8]

Saludos.

Miguel.
torkupo
Forista
Registrado: 2012-01-06
Mensajes: 2

Publicado: 2012-01-06 12:10:20    Asunto:

[quote:dc955ed80d="miguelgf"]Hola.

?Te valdr?a as??
[code:1:dc955ed80d]sed 's/\./\,/;s/\-,/\-0,/;s/^,/0,/' archivo.datos[/code:1:dc955ed80d]

Entrada:
[code:1:dc955ed80d].144234
-.425345
-1.2342
1.15125[/code:1:dc955ed80d]

Salida:
[code:1:dc955ed80d]0,144234
-0,425345
-1,2342
1,15125[/code:1:dc955ed80d]

Lo ?nico que he a?adido es que si encuentra una l?nea que empieza por coma, le ponga un cero:
[code:1:dc955ed80d]s/^,/0,/[/code:1:dc955ed80d]

Saludos.

Miguel.[/quote:dc955ed80d]
Jaja!, muchas gracias Miguel!!!. Si, me sirve eso. Hab?a intentado eso del ^ para comenzar la linea, pero pon?a siempre la barra invertida '\^' . De nuevo, gracias por tu tiempo, un abrazo.

TorKupo
miguelgf
Forista


Registrado: 2006-12-28
Mensajes: 621

Publicado: 2012-01-06 23:26:39    Asunto:

Hola
[quote:166f315af5="torkupo"]
Hab?a intentado eso del ^ para comenzar la linea, pero pon?a siempre la barra invertida '\^' .[/quote:166f315af5]
Si pones barra invertida significa que lo que viene detr?s no tiene significado especial para la expresi?n regular, por tanto "\^" significa que esperas expresamente que aparezca el car?cter "^"
[quote:166f315af5="torkupo"]
De nuevo, gracias por tu tiempo, un abrazo.
[/quote:166f315af5]
De nada. Para eso me met? en el foro

Saludos.

Miguel.





La marca registrada Linux (R) se usa siguiendo la sublicensia obtenida del "Linux Mark Institute",
el LICENCIATARIO exclusivo de Linus Torvalds, propietario de la marca en EEUU y otros países
The registered trademark Linux (R) is used pursuant to a sublicense from the Linux Mark Institute,
the exclusive LICENSEE of Linus Torvalds, owner of the mark in the U.S. and other countries