Sed Reemplazar nueva línea con espacio

Sed Reemplazar Nueva Linea Con Espacio



En UNIX/Linux, el comando sed es una herramienta dedicada para editar secuencias. Puede realizar varias operaciones en un flujo de texto, como buscar, encontrar y reemplazar, e insertar/eliminar. Sin embargo, en su mayor parte, sed se usa para buscar y reemplazar contenido de texto.

En esta guía, mostraremos el reemplazo de líneas nuevas con espacio usando sed.

Usando sed para reemplazar texto

Primero, veamos rápidamente cómo realizar búsquedas y reemplazos básicos usando sed. Se usará el mismo método cuando se reemplacen líneas nuevas con espacios con algunas opciones adicionales. La estructura de mando es la siguiente:







$ sed -e 's///'

Echa un vistazo al siguiente comando:



$ echo 'el rápido zorro marrón' | sed -e 's/rápido/rápido/g'



El comando echo imprime la cadena en SALIDA ESTÁNDAR . El flujo STDOUT es entonces entubado a sedar Le hemos dado instrucciones a sed para que reemplace cualquier instancia de rápido por rápido. Finalmente, la salida se imprime en la pantalla.





Sustitución de líneas nuevas con espacio

Para demostración, he creado el siguiente archivo de texto test.txt con varios contenidos ficticios:

$ gato prueba.txt



El comando sed acepta expresiones regulares para describir varios patrones. Aprovechando esta función, describiremos la nueva línea como \n. Intentemos reemplazar las líneas nuevas con espacios en blanco:

$ sed -e 's/\n/ /g' prueba.txt

Sin embargo, eso no funcionó como se esperaba. Para lograr este objetivo, necesitamos algunas opciones adicionales. Echa un vistazo al siguiente comando:

$ sed -e ':a;N;$!ba;s/\n/ /g' prueba.txt

El comando sed tiene múltiples secciones; cada uno denota una tarea específica:

  • :a: Crea una etiqueta 'a'
  • N: agrega la siguiente línea al espacio del patrón
  • $!ba: si no es la última línea, regresa a la etiqueta 'a'
  • s/\n/ /g: busca y reemplaza la nueva línea (\n) con un espacio (/ /). El patrón coincide globalmente (/g)

El comando sed recorre los pasos hasta llegar a la última línea, sustituyendo todos los caracteres \n por espacios.

En lugar de este comando complejo, podemos simplificar las cosas usando el indicador -z que especifica que sed funcione con registros separados por valores nulos. El comando se vería así:

$ sed -z -e 's/\n/ /g' prueba.txt

Metodos alternativos

Si bien sed puede hacer la tarea muy bien, existen algunas herramientas alternativas. En esta sección, examinaremos brevemente un par de ellos.

Para el siguiente ejemplo, podemos usar el comando tr para reemplazar nueva línea con espacios en blanco de una manera simple:

$ tr '\n' ' ' < prueba.txt

También podemos usar perl para hacer el trabajo. La siguiente sintaxis también es similar a la que usamos con sed (pero simplificada):

$ perl -p -e 's/\n/ /' prueba.txt

Otra forma de reemplazar líneas nuevas con espacios en blanco es usar el comando pegar. Tenga en cuenta que solo puede eliminar un carácter:

$ pegar -s -d ' ' prueba.txt

Similar a sed, Linux viene con otra herramienta awk. Similar a sed, también puede realizar algunos reemplazos avanzados en la entrada. Para nuestro propósito, use el siguiente comando awk:

$ awk 1 ORS=' ' prueba.txt

Conclusión

Esta guía exploró cómo podemos reemplazar nueva línea con espacio usando sed. Se logró de dos maneras diferentes. Esta guía también incluye otras herramientas relevantes que podemos usar para reemplazar la nueva línea con espacios en blanco.

En lugar de usar comandos complejos que son difíciles de memorizar, usamos secuencias de comandos Bash para realizar muchas cosas en Linux. Aunque tiene el costo de algo de rendimiento, la flexibilidad y la facilidad de uso valen la pena. Aprender más acerca de Bash scripting para principiantes .