Procesamiento de texto con sed

Procesamiento de texto con sed en Linux: un truco poderoso

sed (stream editor) es una de las herramientas más versátiles y eficientes en el ecosistema Unix/Linux para manipular texto desde la línea de comandos. Permite realizar búsquedas, sustituciones, inserciones y eliminaciones de forma no interactiva, lo que lo convierte en un aliado insustituible para administradores de sistemas, desarrolladores y usuarios avanzados.

Este artículo ofrece un recorrido detallado hacia las características más relevantes de sed, ejemplos prácticos, consejos de optimización y técnicas avanzadas. La intención es que, al término de la lectura, dispongas de un conocimiento sólido para aplicar sed en tus tareas diarias de procesamiento de texto, automatización de scripts y manipulación de flujos de datos.

Índice de contenido

  • Introducción a sed
  • Sintaxis básica
  • Expresiones regulares y patrones
  • Comandos más usados
  • Ejemplos prácticos
  • Técnicas avanzadas
  • Integración con VPN y registro de logs
  • Buenas prácticas y optimización
  • Recursos y enlaces recomendados

1. Introducción a sed

sed es un editor de flujo de texto que lee la entrada línea por línea, aplica uno o varios comandos y envía cada línea resultante a la salida estándar. No requiere interacción humana durante su ejecución, lo cual lo convierte en la opción ideal para procesar archivos o cadenas de texto en scripts automatizados.

Fue creado en la década de 1970 por Lee E. McMahon y desde entonces ha sido incluido en prácticamente todas las distribuciones Unix y Linux. Su potencia radica en combinar capacidades de búsqueda, sustitución y manejo de patrones de manera muy ligera.

2. Sintaxis básica

sed [opciones] comando [archivo…]
  • -e script sed: Permite especificar varios comandos.
  • -n: Suprime la impresión automática de cada línea.
  • -i[ext]: Edita archivos en sitio (in-place), opcionalmente respaldando con la extensión indicada.
  • -r o -E: Habilita expresiones regulares extendidas.

3. Expresiones regulares y patrones

El poder real de sed se aprecia cuando se combinan con expresiones regulares (ER). Existen dos modos:

  • BRE (Basic Regular Expressions): Modo por defecto, donde algunos metacaracteres necesitan escaparse.
  • ERE (Extended Regular Expressions): Con -r o -E, no es necesario escapar ciertos metacaracteres como , o {}.

Ejemplo de patrón para encontrar direcciones IP:

^([0-9]{1,3}.){3}[0-9]{1,3}

4. Comandos más usados

Comando Función Ejemplo
s/patrón/reemplazo/flags Sustitución sed s/error/aviso/g archivo.log
d Elimina líneas que coinciden sed /^/d archivo.txt
itexto Inserta antes de la línea actual sed //i index.html
atexto Agrega después de la línea actual sed //a index.html
p Imprime líneas seleccionadas sed -n /ERROR/p servidor.log

5. Ejemplos prácticos

5.1. Normalizar saltos de línea

sed -i s/r// datos_windows.txt

Convierte finales de línea estilo Windows (CRLF) a Unix (LF).

5.2. Extraer columnas delimitadas

sed -n s/^([^,]),([^,]),./1 2/p datos.csv

Separa por comas y muestra solo las dos primeras columnas.

5.3. Reemplazar múltiples patrones

sed -e s/foo/bar/g -e s/baz/qux/g archivo.txt

6. Técnicas avanzadas

  • Bloques de comandos: agrupa varias instrucciones entre {} para aplicarlas condicionalmente.
    /ERROR/ { s/ERROR/AVISO/g w errores.txt }
  • Referencias inversas: usa 1, 2, … para reutilizar grupos capturados.
    sed -r s/([0-9]{4})-([0-9]{2})-([0-9]{2})/3/2/1/g fechas.log
  • Lectura de múltiples líneas: el comando N concatena la siguiente línea al patrón.
    sed -n /START/{:aN/END/!bap} documento.txt

7. Integración con VPN y registro de logs

En entornos donde se usan VPNs para asegurar comunicaciones, a menudo es necesario procesar archivos de log para extraer información relevante, como totales de conexiones, direcciones IP de clientes o tiempos de sesión. A continuación, se muestran algunos ejemplos con VPN populares:

  • OpenVPN:
    sed -n /Peer Connection Initiated/{s/.from // s/:.// p} openvpn.log
  • WireGuard:
    sed -n s/.kid=//s/,.//T p wg-quick.log
  • StrongSwan:
    sed -n /ESTABLISHED/!d s/.src=//s/ dst=.// p strongswan.log

8. Buenas prácticas y optimización

  1. Usar expresiones regulares específicas para evitar sobrecargar la coincidencia.
  2. Evitar tuberías excesivas: combina sed con grep o awk solo cuando sea imprescindible.
  3. Probar sin -i antes de aplicar cambios en sitio.
  4. Documentar scripts con comentarios claros para mantenimiento futuro.
  5. Usar backups automáticos: -i.bak crea copias antes de sobrescribir.

9. Recursos y enlaces recomendados

Con este compendio de conocimientos y ejemplos, sed deja de ser un simple comando y se convierte en una herramienta estratégica para cualquier profesional que trabaje con procesamiento de textos y flujos de datos en entornos Unix/Linux. ¡Empieza a experimentar y potencia tu productividad con sed!

  • Hola 👋 , soy la IA de Linuxmind.dev, te puedo ayudar a aprender.
Gathering thoughts ...

Leave a Reply

Your email address will not be published. Required fields are marked *