Ayuda Script sustitucion textos

Imagen de lyaran
0 puntos

Buenas

Estoy haciendo un script que trata un fichero de texto, y estoy atascado. Ya que tengo un par de campos del fichero separado por comas. Estos campos son fecha y queria sustituir los - separadores DD-MM-YYYY, por / DD/MM/YYYY
He intentado son sed, pero este me sustituye los - por / en todas las apariciones de las lineas, ya que despues de estos campos hay otros con -. Esto lo hice con:

sed 's/-/\//g' ficheroTratar

Tambien he probado con awk, pero en este no se como decir que la sustitucion sea solo en ciertos campos, (son $2, y $3).

Y si corto los campos con awk y los trato con sed

awk -F "," '{print $2,$3}' ficheroTratar | sed 's/-/\//g'

solo tengo esos dos campos, y no se como volverlos a insertar sustituyendo a los anteriores, ya que necesito el fichero con todos los campos y esos 2 sustituidos

Espero que podais echarme una mano, muchas gracias

Imagen de upszot
+1
0
-1

hola...

aca tenes la solucion...

$ echo 'dd-mm-yyyy' |sed 's:-:/:g'
dd/mm/yyyy

Leete esto para ver otras opciones.. ademas de "man sed"
http://www.gentoo.org/doc/es/articles/l-sed2.xml

saludos

+1
0
-1

Gentoo + win7 >> Dell XPS M1530 - T8300 - 4gb - 8600gt 256
ubuntu >> Athon 2000+xp - 1gb - 6600gt 128bt
dd-wrt v24 >> linksys wrt54gl v1.1
putty ;-) >> N80 para controlarlos a todos jeje

Imagen de lyaran
+1
0
-1

No entiendo muy bien la solucion y he revisado las paginas que me indicas.

Con echo 'dd-mm-yyyy', le pasa a sed la cadena dd-mm-yyyy, pero no entiendo para que.

De todas maneras poniendolo como me dices realiza sustituciones de - por / en toda la linea, no solo en los campos fecha, sino que cuando hay guiones tambien los sustituye.

+1
0
-1
Imagen de lyaran
+1
0
-1

Por favor alguien me podia echar una mano, ya que estoy atascado.

+1
0
-1
Imagen de arraclan
+1
0
-1

intenta con esta linea:

sed 's/\([1-9][1-9]\)-\([1-9][1-9]\)-/\1\/\2\//g'

lo que busca es un conjunto "11-11-" para identificar la fecha, creo que con esto será suficiente.

salu2

+1
0
-1

--
arraclan(@)gmail.com
"I'm not anti-social; I'm just not user friendly"
Arraclan, registered Linux user #378069, Ubuntu User #1422

Imagen de lyaran
+1
0
-1

No me ha servido, mira te adjunto un ejemplo con el que estoy tratando:

$ cat prueba2
1,20-03-2001,20-03-2001,20-03-2001,Oscar,69556565,,,
2,2-03-21,20-03-2001,20-03-2001,Oscar,69556565,,
3,25/8/02,28/05/2009,31/03/2010,Daniel,6985566,
4,25-8-02,28-05-2009,31-03-2010,Daniel,6985566,,,,,,,
5,21-02-2001,13\03\03,Esto-esta-separado-con-guion

$ sed 's/\([1-9][1-9]\)-\([1-9][1-9]\)-/\1\/\2\//g' prueba2
1,20-03-2001,20-03-2001,20-03-2001,Oscar,69556565,,,
2,2-03-21,20-03-2001,20-03-2001,Oscar,69556565,,
3,25/8/02,28/05/2009,31/03/2010,Daniel,6985566,
4,25-8-02,28-05-2009,31-03-2010,Daniel,6985566,,,,,,,
5,21-02-2001,13\03\03,Esto-esta-separado-con-guion

Como puedes ver no ha hecho ninguna sustitucion.
Otra cosa que estaba intentado era cortar campos con awk | sustituir con sed, pero no se como devolverlos a su posicion.

Muchas gracias por la ayuda

+1
0
-1
Imagen de arraclan
+1
0
-1

perdón prueba ahora...puse 1 en vez de 0 en el rango

sed 's/\([0-9][0-9]\)-\([0-9][0-9]\)-/\1\/\2\//g'

veo que tienes muchos formatos de fechas, eso complica la cosa o es solo una prueba que has hecho?

salu2

+1
0
-1

--
arraclan(@)gmail.com
"I'm not anti-social; I'm just not user friendly"
Arraclan, registered Linux user #378069, Ubuntu User #1422

Imagen de arraclan
+1
0
-1

con este código me funciona en el ejemplo que me has mandado pruebalo y me cuentas:

sed 's/\([0-9]*\)-\([0-9]*\)-/\1\/\2\//g'

salu2

+1
0
-1

--
arraclan(@)gmail.com
"I'm not anti-social; I'm just not user friendly"
Arraclan, registered Linux user #378069, Ubuntu User #1422

Imagen de lyaran
+1
0
-1

Mil gracias, ahora si que funciona. Lo unico no me queda claro como funciona xq al buscar una cadena y sustituirla, o bien deberia sustituir toda la cadena por la nueva, o como me pasaba a mi que sustituia por ejemplo

20-03-2011 por 20-/03-/2011

Como puede ser que no pase esto...

+1
0
-1
Imagen de arraclan
+1
0
-1

es un poco dificil de ver pero mas o menos en la expresión regular están marcados unos rangos (los números) con el caracter " \" que se usan en el último parámetro como variables de la forma "\1" "\2" para volver a formar el texto con los caracteres sustituidos...

sed 's/\([0-9][0-9]\)-\([0-9][0-9]\)-/\1\/\2\//g'

+1
0
-1

--
arraclan(@)gmail.com
"I'm not anti-social; I'm just not user friendly"
Arraclan, registered Linux user #378069, Ubuntu User #1422

Imagen de lyaran
+1
0
-1

Perfecto muchas gracias de nuevo. Por fin he podido finalizar el script

+1
0
-1