Problemas con Sed en Windows

Imagen de juan82
0 puntos

Aunque es para su uso en Windows hago esta consulta aquí porque Sed es una herramienta Unix y porque doy por hecho que los usuarios de GNU/Linux sabéis más sobre Windows y sus particularidades que los propios usuarios Windows. Si alguien cree que éste no es el lugar para esta consulta le pido disculpas.

 Estoy tratando de modificar un archivo de log en formato .txt usando Sed. El problema es que en el archivo de salida me lo escribe todo en una única línea y donde deberían estar los retornos de carro y salto de línea me aparece el símbolo del cuadrado. ¿Cómo puedo hacer que el archivo de salida me respete los saltos de línea del original? Gracias.

Imagen de joseluis
+1
0
-1

¿Podías poner los parámetros que le estás pasando al sed por si el problema real fuera ese y no tuviera nada que ver con S.O. que uses? Y de paso también algunas líneas del fichero que vas a cambiar.

PD1. Te aviso que yo intentaré probarlo en GNU/Linux
PD2. Como imagino, aunque puedo equivocarme, que cuando vea este hilo un moderador acabará por cerrarlo enviandolo a la Papelera, le pediría que hasta que no esté claro si el problema se debe al Sistema Operativo utilizado lo mantengan abierto.


  • La guia Ubuntu - solución a muchos problemas
  • Google y el buscador de ubuntu-es son tus amigos

Fdo. El forense asesino.

+1
0
-1

Fdo. Forense asesino, Censor fundamentalista, Fustigador de novatos y Patético maleducado

Imagen de juan82
+1
0
-1

Tengo un archivo de texto con algo así:

/sites/portal

/index.jsp?opcion=

Y usando Sed quiero obtener esto:

/portal

/

Para eso uso la siguiente orden:

sed s/\/sites\/portal/\/portal/g entrada.txt | sed s/\/index.jsp?opcion=/\//g > salida.txt

Y lo que veo en salida.txt es:

/portal"simbolo del cuadrado vacío"/

Ése "símbolo del cuadrado vacío" que no se escribir aquí sé que está relacionado de algún modo con el salto de línea, no sé si es una especie de representación o algo así. Pero lo que yo quiero es el salto de línea en sí.

Gracias.

+1
0
-1
Imagen de joseluis
+1
0
-1

La ejecución de:

 sed "s/\/sites\/portal/\/portal/g" entrada.txt | sed "s/\/index.jsp?opcion=/\//g" > salida.txt

funciona bien en GNU/Linux.
La impresión que me da es que el fichero entrada.txt tiene algún carácter raro al final de la línea o bien que el sed de windows tiene algún comportamiento especial.

Siento no poder ayudarte.


  • La guia Ubuntu - solución a muchos problemas
  • Google y el buscador de ubuntu-es son tus amigos

Fdo. El forense asesino.

+1
0
-1

Fdo. Forense asesino, Censor fundamentalista, Fustigador de novatos y Patético maleducado

Imagen de joseluis
+1
0
-1

Por si acaso te sirve prueba a añadir con el sed un CTRL+M al final de cada línea.

Si sed lo lanzas desde cygwin (que sería lo más similar en Windows a la bash de GNU/Linux) puedes probar a hacer lo siguiente para conseguir el CTRL+M al final:

$ sed "s/\/sites\/portal^M/\/portal/g" entrada.txt | sed "s/\/index.jsp?opcion=/\//g " | sed "s/$/^M/g"  > salida.txt

Teniendo en cuenta que el carácter ^M no te valdrá con copiarlo sino que tendrás que sacarlo con la combinación de teclas CTRL+V CTRL+M (Es decir pulsas CTRL junto con la V y a continuación otra vez CTRL junto con la M).

La ejecución anterior del sed puede servir también si se lanza el sed en GNU/Linux y se envía el fichero resultante a una máquina Windows con poco cuidado (por ejemplo un ftp en binario).


  • La guia Ubuntu - solución a muchos problemas
  • Google y el buscador de ubuntu-es son tus amigos

Fdo. El forense asesino.

+1
0
-1

Fdo. Forense asesino, Censor fundamentalista, Fustigador de novatos y Patético maleducado

Imagen de juan82
+1
0
-1

Antes de nada muchas gracias por tu ayuda. Voy a probar lo que me dices aunque lo que me gustaría es poder escribirlo en un fichero por lotes MS-DOS para poder usarlo como un ejecutable.

+1
0
-1
Imagen de joseluis
+1
0
-1

En el último código que te pasé he visto que hay una errata:

Puse:

sed "s/\/sites\/portal^M/\/portal/g" entrada.txt | sed "s/\/index.jsp?opcion=/\//g " | sed "s/$/^M/g"  > salida.txt

Cuando debería haber puesto:

sed "s/\/sites\/portal/\/portal/g" entrada.txt | sed "s/\/index.jsp?opcion=/\//g " | sed "s/$/^M/g"  > salida.txt

Sobre lo del .bat no sabría qué decirte (eso si que queda fuera del ámbito de este foro), pero si utilizas cygwin (o bien alguna otra shell que esté también para win como por ejemplo zsh) siempre puedes hacer un script (que es como un .bat) que además lo podrías utilizar sin necesidad de cambiarlo en caso que lo utilizaras en GNU/Linux o *BSD


  • La guia Ubuntu - solución a muchos problemas
  • Google y el buscador de ubuntu-es son tus amigos

Fdo. El forense asesino.

+1
0
-1

Fdo. Forense asesino, Censor fundamentalista, Fustigador de novatos y Patético maleducado

Imagen de juan82
+1
0
-1

Tanto si lo visualizo en la consola del sistema (cmd.exe) como si abro el archivo de salida con otro editor (UltraEdit) el resultado es el correcto. Así que el problema es el bloc de notas de Windows, pero yo necesito que se vea bien en él... :(

+1
0
-1
Imagen de juan82
+1
0
-1

He hecho algo parecido a lo que me recomendaste pero en lugar de ^M pongo \r así:

sed s/$/\r/

y me funciona en todas las líneas salvo en la última donde me sigue apareciendo el dichoso cuadrito... pero bueno ya está mucho mejor así.

Gracias por tu ayuda José Luis. ;)

+1
0
-1