Sed — Transformación de Texto por Líneas (Stream Editor)
Edición de flujo con sed: sustitución global y condicionada, borrado por patrón/rango, inserciones, -i in-place, -E regex extendida y pipelines de limpieza de salida.
1. Operational Scope & Technical Objective
sed es un editor de flujo que procesa texto línea por línea de forma no interactiva: sustituciones, borrados, inserciones y transformaciones en pipelines. Su valor operativo: normalizar salidas de herramientas (quitar cabeceras, separar campos, limpiar logs) sin tocar ficheros originales, o editar en masa con -i cuando la reescritura es segura. Es el complemento natural de grep en cualquier cadena de procesamiento de salidas.
2. High-Impact Syntax & Command Cheatsheet
# Sintaxis general
sed 'comando' archivo.txt
# comando más común: s/patrón/reemplazo/
# s -> sustitución
# patrón -> regex (BRE por defecto)
# reemplazo -> texto de sustitución
# sin modif. -> solo la PRIMERA ocurrencia por línea
# g -> global (todas las ocurrencias)
# número -> solo la ocurrencia número n
sed 's/ex/ex1/' text.txt # primera ocurrencia de cada línea
sed 's/ex/ex1/g' text.txt # todas las ocurrencias
sed 's/ex/ex1/3' text.txt # solo la 3ª ocurrencia por línea
# Sustitución condicionada a que la línea case con un patrón
sed '/ee/ s/Suite/Ste/g' sample.txt
# /ee/ -> solo líneas que contengan 'ee'; en ellas, reemplaza 'Suite' por 'Ste'
# Líneas específicas y borrado
sed '$s/Suite/Ste/' sample.txt # $ = última línea
sed '/Suite/d' sample.txt # borra las líneas que contienen 'Suite'
sed '2,5d' sample.txt # borra de la línea 2 a la 5
# Fin de línea y separadores
sed 's/$/\n/' sample.txt # añade salto de línea al final de cada línea
sed 's/,/\n/g' sample.txt # sustituye comas por saltos de línea
sed -e 's/$/\n/g' -e 's/,/\n/g' sample.txt # -e: múltiples expresiones en una pasada
# Encadenar con pipes (equivalente a -e en una sola pasada)
sed 's/$/\n/g' sample.txt | sed 's/,/\n/g'
# Guardar en el fichero directamente (in-place)
sed -i 's/Suite/Ste/g' sample.txt
# -i -> edición en el archivo
# En BSD/macOS: sed -i '' '...' (requiere argumento vacío)
Producción: limpieza de texto
sed 's/^[ \t]*//' file.txt # elimina espacios al inicio de cada línea
sed 's/[ \t]*$//' file.txt # elimina espacios al final de cada línea
sed -E 's/(foo|bar)/baz/g' file.txt # -E: regex extendida, agrupación (foo|bar)
Resumen de opciones
s/…/…/ sustitución · g global · /patrón/d borrado · n,n rango · $ última línea · -i in-place · -e múltiples expresiones · -E regex extendida.
3. Real-World Offensive/Defensive Scenarios
Normalización de salidas de herramientas. La salida de un escáner o de un volcado llega con cabeceras, comillas y campos extra; sed -E 's/^[ \t]*//' + s/.*,(.*)/\1/ + grep -v '^#' dejan solo lo accionable para la siguiente fase (alimentar wordlists, cut, sort -u).
Sanear ficheros de configuración al vuelo. Antes de inyectar un fichero en un servicio o de parsear un backup, sed 's/[\r\n]//g' normaliza saltos de línea y sed 's/;.*$//' elimina comentarios — el texto queda en el formato exacto que el parser espera, sin ediciones manuales.
Edición masiva segura. sed -i reescribe en sitio (p. ej. rotar un dominio embebido en configs, cambiar un puerto en múltiples ficheros). El riesgo es el patrón: siempre probar primero en stdout sin -i y usar -E con agrupaciones cuando la regex lo requiera.
Defensa (logs). Sed permite pseudonimizar dumps antes de compartirlos (reemplazar IPs sed -E 's/[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/<IP>/g'), manteniendo la estructura del log sin filtrar datos sensibles.