Sed en el lugar Editar archivo

“En el ecosistema UNIX/Linux, el comando sed es una herramienta dedicada para editar secuencias, de ahí el nombre (editor de secuencias). Recibe entradas de texto como «flujos» y realiza las operaciones especificadas en el flujo».

En esta guía, exploraremos la realización de la edición de archivos en el lugar con sed.

requisitos previos

Para realizar los pasos que se muestran en esta guía, necesitará los siguientes componentes:

    • Cualquier distribución UNIX/Linux moderna. Para esta guía, usaré Ubuntu 20.04 LTS ejecutándose en VirtualBox .
    • Un emulador de terminal adecuado, preferiblemente con resaltado de sintaxis. Echa un vistazo a algunos de los mejores emuladores de terminal en Linux .

Edición de flujo usando sed

Primero, veamos brevemente cómo funciona sed. La estructura de comando de sed es la siguiente:

$ sed < opciones > < operaciones > < flujo >

 
El siguiente comando muestra un flujo de trabajo simple de sed:

$ echo «el rápido zorro marrón» | sed -e ‘s/rápido/rápido/’

 

Aquí,

    • El comando echo imprime la cadena en STDOUT . Obtenga más información sobre STDIN, STDOUT y STDERR .
    • Estamos canalizando la salida al sed Aquí, STDOUT es el flujo sed que realizará la tarea especificada.
    • El comando sed , tal como se especifica, buscará cualquier instancia de la palabra rápido y la reemplazará con rápido . El flujo resultante se imprimirá en la consola.

¿Y si quisiéramos modificar los textos de un archivo de texto? El comando sed también puede funcionar usando archivos de texto como flujo. Para la demostración, tomé el siguiente archivo de texto:

$ cat demo.txt

 

El siguiente comando sed reemplazará todas las instancias de con da :

$ sed -e ‘s/the/da/g’ demostración.txt

 

Verifique el contenido de demo.txt para cambios:

$ cat demo.txt

 

Del último ejemplo, podemos ver que sed solo imprimió el flujo resultante en la consola. El archivo de origen ( demo.txt ) no se tocó.

Edición de archivos en el lugar usando sed

Como se demostró en el ejemplo anterior, la acción predeterminada de sed es imprimir el contenido modificado en la pantalla. Es una gran función que puede evitar cambios accidentales en los archivos. Sin embargo, si queríamos guardar los cambios en el archivo, necesitábamos proporcionar algunas opciones adicionales.

Una técnica simple y común sería reemplazar el contenido del archivo con la salida sed . Echa un vistazo al siguiente comando:

$ cat demo.txt | sed ‘s/el/da/g’ | camiseta demo.txt

 

Aquí, estamos sobrescribiendo el contenido de demo.txt con la salida del comando sed .

Si bien el comando funciona según lo previsto, requiere escribir códigos adicionales. Involucramos los comandos cat y tee junto con el comando sed. Bash también participa en la redirección de las salidas. Por lo tanto, el comando requiere más recursos de los que necesita.

Para resolver esto, podemos usar la función de edición en el lugar de sed. En este modo, sed cambiará el contenido del archivo directamente. Para invocar el modo de edición en el lugar, tenemos que usar el indicador -i o -in-place . El siguiente comando sed lo implementa:

$ sed –in-place -e ‘s/the/da/g’ demostración.txt

 

Verifique demo.txt para cambios:

$ cat demo.txt

 

Como puede ver, el contenido del archivo se cambia sin agregar ningún componente adicional.

Pensamientos finales

En esta guía, demostramos con éxito la realización de ediciones en el lugar en archivos de texto usando sed . Si bien sed en sí mismo es un programa simple, la principal fuente de poder radica en su capacidad para incorporar expresiones regulares. Regex permite describir patrones muy complejos sobre los que actúa sed. Consulte expresiones regulares en sed para obtener más información.

Alternativamente, puede usar scripts Bash para filtrar y modificar el contenido de un archivo. De hecho, puede incorporar sed en sus scripts para ajustar el contenido del texto. Consulte esta guía sobre cómo empezar a usar Bash scripting .

¡Feliz computación!