Uso de Sed

Imagen de Mikelony
0 puntos

Buenas.

A ver si soy capaz de explicar el problema que tengo con Sed.

Tengo un documento de texto importado de Windows, con su salto de línea y retorno de carro, y en Linux quiero conseguir que al principio de cada línea añada un texto, y al final de la misma, no en la siguiente, sino al final de la misma linea, otro texto.

Decir que estoy haciendo XML en UTF8, y que la primera parte, es decir, añadir texto al principio de cada línea lo hago bien, pero añadir algo al final sí lo hace, pero en la línea siguiente, no al final de su línea.

Pongo un ejemplo por si alguien me puede ayudar:

Documento de Windows (de donde viene):

Hola

Que

Tal

 

Proceso en Linux (lo que busco):

<name>Hola</name>

<name>Que</name>

<name>Tal</name>

 

Lo que he conseguido:

<name>Hola

</name>

<name>Que

</name>

<name>Tal

</name>

 

Me he estado informando, y el problema es que en Windows utilizan el CRLF (retorno de carro y salto de línea), y en Linux el LF nada más si no me equivoco, por eso al tratar el fichero en Linux me pasa el final a la linea siguiente.

 

¿Alguien sabe cómo puedo ponerlo bien, como sea? He probado con varios argumentos de Sed, pero no lo consigo.

 

Un saludo 

Imagen de joseluis
+1
0
-1

El retorno de carro es el caracter CTRL+M (se representa como ^M, que en un terminal, o en el vi se obtiene mediante la combinación de teclas CTRL+V CTRL+M).

Si es ese el caracter que molesta lo primero que tendrías que hacer es quitarlo (con el sed por ejemplo).

Así para obtener el resultado que buscas (y suponiendo que el fichero que tienes se llama mifichero.xml) te valdría con hacer:

sed "s/^M$//g" mifichero.xml | sed "s/^/<name>/g" | sed "s/$/<\/name>/g"

Ten en cuenta que el carácter ^M no te servirá si lo copias de aquí, tienes que sacarlo como te he indicado antes, es decir pulsando CTRL+V CTRL+M.


Lectura obligada:
+1
0
-1

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

Imagen de Mikelony
+1
0
-1

¡Muchas gracias JoseLuis!

Mañana mismo lo pruebo, y te comento si me ha funcionado.

Un abrazo 

Linux - Sé un poco más libre

+1
0
-1

* * * Ubuntu user 14856 * * * ==> ¿Serás el siguiente?

Imagen de Mikelony
+1
0
-1

JoseLuis, lo tengo casi casi hecho, siguiendo tus sabias pautas me hace esto:

<name>Hola  </name>

Es decir, me deja 2 espacios después de "Hola"; ¿sabes alguna manera de juntarlo directamente?

¡Muchísimas gracias por tu ayuda tío! 

Linux - Sé un poco más libre

+1
0
-1

* * * Ubuntu user 14856 * * * ==> ¿Serás el siguiente?

Imagen de joseluis
+1
0
-1

Para quitar los espacios del final puedes utilizar dentro del sed la expresión " [ ]*$" (espacio, corchete abierto, espacio, corchete cerrado, asterisco, dolar). Así la instrucción anterior podría quedar de la siguiente forma:

sed "s/^M$//g" mifichero.xml | sed "s/^/<name>/g" | sed "s/ [ ]*$/<\/name>/g"

  • 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 Mikelony
+1
0
-1

Muchísimas gracias por tu ayuda Jose Luis, ya está todo hecho.

Me he apuntado en otro documento el COMO paso a paso, con una explicación al lado para saber qué he hecho en cada momento.

Repito, muchas gracias por todo tío, ¡esta comunidad se sale!

Un abrazo 

Linux - Sé un poco más libre

+1
0
-1

* * * Ubuntu user 14856 * * * ==> ¿Serás el siguiente?

Imagen de juan82
+1
0
-1

Saludos a todos.

Necesito usar Sed con WindowsXP para convertir archivos de texto (.txt). El problema es que haga lo que haga con el archivo original en el archivo de salida no me respeta los retornos de carro, es decir, me lo escribe todo en una única línea y entre cada una de ellas me deja un símbolo con forma de cuadrado. ¿Qué puedo hacer para que me respete los saltos de línea tal y como están en el archivo original?

Tengan en cuenta que soy novato. Muchas gracias. 

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

  1. Si tienes alguna duda deberías abrir un nuevo hilo y no aprovechar este. Ten en cuenta que tu problema puede ser muy distinto del planteado en este hilo.
  2. Este es un foro de Ubuntu por lo que las dudas que tengas deberán estar relacionadas con Ubuntu (o al menos con GNU/Linux). Si tú tienes una duda sobre el manejo de sed en WindowsXP no creo que este sea el lugar, ten en cuenta que el problema podría deberse a las particularidades de Windows. Te recomiendo que intentes ejecutar el sed en algún GNU/Linux y si ahí te da algún problema abre un nuevo hilo exponiendo todo lo que has hecho y los errores que te han salido

Si te he interpretado mal y lo único que está en Windows XP es el archivo de texto pero sed lo vas a utilizar desde GNU/Linux te ofrezco mis disculpas, pero en ese caso me reafirmo en que deberías abrir un nuevo hilo.


  • 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