Introducción
Al trabajar con archivos de texto en Linux, a menudo necesita realizar modificaciones automáticas sin abrir un editor de texto interactivo. Por ejemplo, puede necesitar eliminar un encabezado de un archivo CSV, borrar líneas en blanco o extraer un rango específico de líneas de un archivo de registro.
Para estas tareas, utilizamos sed (editor de flujos).
sed es un potente editor de texto no interactivo. Lee la entrada desde un archivo o una tubería, realiza operaciones en cada línea y muestra el resultado. Este modelo de «leer, transformar e imprimir» es un enfoque clásico de Unix y funciona especialmente bien en las tuberías.
Este modelo explica el nombre editor de flujos. sed está diseñado para trabajar con texto que fluye, no solo con archivos abiertos en un editor de pantalla completa. Por eso se integra de forma tan natural en las tuberías del shell y en los scripts de automatización.
En este laboratorio, aprenderá a:
- Eliminar líneas (
d): quitar encabezados o comentarios no deseados. - Quitar líneas vacías: utilizar expresiones regulares para filtrar las líneas en blanco.
- Insertar texto (
i): añadir líneas nuevas al archivo. - Imprimir líneas (
p): extraer rangos específicos de líneas.
Eliminar líneas
Comience inspeccionando el archivo de ejemplo.
cat /home/labex/project/data.csv
Observará que contiene dos líneas de comentario al principio, ambas iniciadas con #. Queremos eliminar esas líneas.
Para eliminar líneas en sed, utilizamos el comando d.
1delimina la línea 1.1,2delimina las líneas 1 y 2.
Direccionar las líneas por número es una de las ideas básicas de sed. Una dirección indica a sed a qué línea o rango de líneas debe aplicarse un comando, y el comando de edición indica qué debe hacer allí.
Ejecute el siguiente comando para previsualizar la eliminación sin modificar el archivo:
sed '1,2d' data.csv
La salida muestra el contenido del archivo sin las dos primeras líneas. Sin embargo, compruebe de nuevo el contenido del archivo:
cat data.csv
Las líneas siguen allí. De forma predeterminada, sed envía la salida a la pantalla (salida estándar) y no modifica el archivo original. Esta es una medida de seguridad.
Para aplicar los cambios directamente al archivo, es decir, editarlo «in situ», utilice la opción -i:
sed -i '1,2d' data.csv
Verifique los cambios:
cat data.csv
Ahora las líneas del encabezado se han eliminado de forma permanente.
Quitar líneas vacías
Nuestro archivo todavía contiene líneas vacías que interrumpen la estructura de los datos. Normalmente no queremos incluirlas en los archivos de datos procesados.
Para quitarlas, combinaremos el comando de eliminación (d) con una expresión regular (Regex).
^coincide con el inicio de una línea.$coincide con el final de una línea.^$coincide con una línea que comienza y termina inmediatamente; es decir, una línea vacía.
Este es un buen ejemplo de cómo sed combina dos capas: un patrón de dirección y una acción de edición. El patrón /^$/ selecciona las líneas coincidentes y d elimina esas líneas seleccionadas.
El comando /^$/d indica a sed que elimine cualquier línea que coincida con el patrón de línea vacía.
Ejecute el comando para quitar las líneas vacías directamente en el archivo:
sed -i '/^$/d' data.csv
Compruebe el resultado:
cat data.csv
Ahora el archivo debería ser una lista compacta de datos, sin espacios vacíos.
Insertar texto
Ahora que los comentarios innecesarios han desaparecido, supongamos que queremos añadir al archivo un encabezado de clasificación adecuado.
El comando i (Insert) añade texto antes de la línea especificada.
1i Textinserta «Text» antes de la línea 1.
El comando a (Append) añade texto después de la línea especificada.
1a Textinserta «Text» después de la línea 1.
Junto con la eliminación y la sustitución, comandos como i y a muestran que sed no se limita a reemplazar texto. Puede modificar el flujo eliminando, añadiendo y seleccionando líneas a medida que pasan por él.
Ejecute el siguiente comando para insertar «Company Confidential» al principio del archivo:
sed -i '1i Company Confidential' data.csv
Verifique el contenido del archivo:
cat data.csv
La línea nueva se ha insertado al principio y ha desplazado hacia abajo todas las demás líneas.
Imprimir líneas específicas
A veces no desea editar el archivo, sino únicamente extraer líneas específicas. sed puede actuar como una versión más flexible de head o tail.
De forma predeterminada, sed imprime todas las líneas que procesa. Para imprimir únicamente líneas específicas:
- Utilice la opción
-npara suprimir la impresión automática. - Utilice el comando
ppara imprimir explícitamente las líneas específicas.
Sin -n, sed imprimiría automáticamente todas las líneas y, después, volvería a imprimir las líneas seleccionadas cuando se ejecutara p, lo que suele confundir a los principiantes. -n desactiva el comportamiento predeterminado para que el comando imprima únicamente lo que usted solicita.
Para imprimir las líneas 5 a 10:
sed -n '5,10p' data.csv
Para imprimir solo la última línea, utilice el símbolo $, que representa el final del archivo:
sed -n '$p' data.csv
Esto resulta muy útil al analizar archivos de registro grandes en los que solo necesita consultar una sección específica.
Resumen
En este laboratorio, aprendió los conceptos básicos de la edición de flujos con sed:
- Eliminación (
d): quitar líneas específicas (1,2d) o líneas que coincidan con un patrón (/^$/d). - Inserción (
i): añadir texto al flujo del archivo en ubicaciones específicas. - Impresión (
-n ... p): suprimir la salida predeterminada e imprimir únicamente las líneas seleccionadas. - Edición in situ (
-i): modificar directamente el archivo en lugar de limitarse a mostrar el resultado en la pantalla.
sed es una herramienta esencial para el procesamiento automatizado de texto y se utiliza ampliamente en scripts de shell para la gestión de configuraciones y el análisis de registros.



