Guía completa del comando sed en Linux

Resumen

Presentamos el comando sed, un potente editor de flujo que permite sustituir y editar el contenido de archivos de texto de forma rápida y precisa en entornos Linux. A través de ejemplos prácticos, aprenderá desde la sustitución básica de cadenas hasta la eliminación de líneas específicas y la opción en línea (-i) para modificar archivos directamente mientras realiza copias de seguridad simultáneas.

1. Preparación del entorno de práctica y sustitución básica de cadenas con sed (comando s)

Para crear un directorio dedicado donde realizar las prácticas con el comando sed de forma segura y desplazarse a dicha ubicación, ejecute el comando mkdir -p ~/sed_practice && cd ~/sed_practice.

mkdir -p ~/sed_practice && cd ~/sed_practice

Para generar el texto de ejemplo que se utilizará en la práctica de sustitución de cadenas, ejecute el comando echo -e 'apple is delicious\nbanana is yellow\napple is red' > fruits.txt para escribir el contenido en el archivo.

echo -e ‘apple is delicious\nbanana is yellow\napple is red’ > fruits.txt

El comando sed es un editor de flujo que procesa y edita flujos de texto.
Al utilizar el operador de sustitución s, se reemplaza la primera coincidencia de la cadena apple por orange en cada línea y se muestra el resultado en pantalla.
El contenido del archivo original fruits.txt no se modifica y solo se muestra el resultado en la salida estándar.
⚙️ [Opciones principales]

-i : Modifica y guarda directamente el archivo original en lugar de mostrar los resultados en pantalla.
-e : Concatena y ejecuta múltiples comandos de script de edición a la vez.
-n : Suprime la salida automática del espacio de patrones y muestra únicamente las líneas especificadas de forma explícita.
-E o -r : Habilita y utiliza la sintaxis de expresiones regulares extendidas (ERE).

sed ’s/apple/orange/’ fruits.txt

Si añade el indicador g al final de la expresión de sustitución, todas las coincidencias dentro de una misma línea se reemplazarán de forma global.
Se utiliza cuando existen múltiples ocurrencias del mismo término de búsqueda en cada línea y se desean cambiar todas sin omitir ninguna.

sed ’s/apple/orange/g’ fruits.txt

2. Salida selectiva y eliminación de líneas específicas (comandos d y opción -n)

Para preparar los datos de registro necesarios para la práctica de selección y eliminación de líneas, ejecute el comando echo -e 'Line 1: Server OK\nLine 2: Server Warning\nLine 3: Server Error\nLine 4: Server OK' > server.log para crear el archivo de ejemplo.

echo -e ‘Line 1: Server OK\nLine 2: Server Warning\nLine 3: Server Error\nLine 4: Server OK’ > server.log

Al combinar la opción -n con el comando p, solo se muestran en pantalla las líneas comprendidas en el rango especificado, de la línea 2 a la 3.
Resulta muy útil para suprimir la salida automática predeterminada y comprobar únicamente las líneas seleccionadas.

sed -n ‘2,3p’ server.log

Utilice el comando d junto con la coincidencia de patrones para excluir las líneas que contengan la cadena Warning y mostrar solo el resto del contenido en pantalla.
Se emplea para filtrar y revisar registros innecesarios o líneas que cumplan ciertas condiciones.

sed ‘/Warning/d’ server.log

Especifique un número de línea concreto y ejecute el comando d para mostrar en pantalla el resultado tras eliminar la segunda línea.
Se utiliza cuando se desea inspeccionar el contenido de un archivo eliminando una línea por su número de línea específico.

sed ‘2d’ server.log

3. Modificación directa del archivo original y copia de seguridad automática (opción -i)

Para realizar la práctica de modificación de archivos de configuración, cree el archivo config.env con datos de ejemplo de variables de entorno.

echo -e ‘PORT=8080\nDEBUG=true\nTIMEOUT=30’ > config.env

Al utilizar la opción -i.bak, se genera un archivo de respaldo del original llamado config.env.bak y, al mismo tiempo, se sustituye inmediatamente la configuración DEBUG=true por DEBUG=false, guardando los cambios en el archivo original.
Se aplica cuando se necesita modificar directamente el archivo original preservando de forma segura su estado anterior.

sed -i.bak ’s/DEBUG=true/DEBUG=false/’ config.env

Verifique el contenido del archivo config.env modificado mediante el comando cat.
Puede comprobar que el valor de DEBUG se ha cambiado correctamente a false y se ha reflejado en el archivo.

cat config.env

Muestre y compruebe el contenido del archivo de copia de seguridad generado automáticamente, config.env.bak.
Podrá constatar que el contenido original antes de la modificación (DEBUG=true) se conserva intacto, garantizando un respaldo seguro.

cat config.env.bak

4. Sustitución avanzada de texto mediante expresiones regulares y cambio de delimitadores

Para generar datos de ejemplo de rutas de archivos que se usarán en la práctica de sustitución de rutas, escriba el contenido en el archivo paths.txt mediante el comando echo.

echo -e ‘Old path: /usr/local/bin\nNew path: /usr/local/bin’ > paths.txt

En lugar del delimitador predeterminado de barra diagonal (/), utilice el carácter de barra vertical (|) como delimitador de sustitución para reemplazar de forma segura /usr/local/bin por /usr/bin en la ruta y mostrar el resultado.
Al trabajar con rutas de archivos o URL que contienen barras diagonales, esto permite escribir expresiones limpias sin necesidad de caracteres de escape (\).

sed ’s|/usr/local/bin|/usr/bin|g’ paths.txt

Para llevar a cabo la práctica de eliminación de espacios en blanco mediante expresiones regulares, cree el archivo de ejemplo spaces.txt con espacios iniciales y finales.

echo -e ’   leading spaces\nno spaces\n   trailing removed   ’ > spaces.txt

Haciendo coincidir el símbolo ^, que indica el inicio de línea, con la expresión regular [ \t]*, que especifica espacios y tabulaciones, se eliminan todos los espacios en blanco situados al principio de cada línea antes de mostrar el resultado.
Esta técnica resulta muy útil para limpiar de forma masiva la sangría o los espacios en blanco en documentos y datos de registro.

sed ’s/^[ \t]*//’ spaces.txt

Hasta aquí hemos revisado los usos esenciales del comando sed en Linux, desde la sustitución básica de texto hasta la modificación por lotes de grandes volúmenes de archivos.
Al ser una herramienta potente que reduce drásticamente las tareas repetitivas de edición de archivos, le recomendamos aprovecharla siempre que la necesite.