Introducción
Sed es una herramienta indispensable en el arsenal de cualquier administrador de sistemas o desarrollador que trabaja en entornos Linux. Su nombre significa ‘stream editor’ y su función principal es procesar flujos de texto de forma lineal, aplicando transformaciones sin necesidad de cargar el archivo completo en memoria. Esto lo hace extremadamente eficiente para archivos grandes o para usar dentro de tuberías y scripts. En este artículo exploraremos desde la sintaxis básica hasta ejemplos avanzados que le permitirán aprovechar al máximo el poder de sed.
¿Qué es sed?
Aunque sed puede parecer críptico a primera vista, su lógica es sencilla: lee entrada línea por línea, ejecuta las instrucciones que le proporcionamos y envía el resultado a la salida estándar. No modifica el archivo original a menos que le indiquemos explícitamente con opciones como -i. Esta característica lo convierte en un aliado seguro para pruebas y prototipos, ya que podemos experimentar sin riesgo de dañar datos.
Sintaxis básica
La forma más simple de invocar sed es: sed ‘comando’ archivo. El comando va entre comillas simples para evitar que el shell interprete caracteres especiales. Los comandos más frecuentes comienzan con una dirección que especifica qué líneas afectar, seguida de la acción. Por ejemplo, ‘5,10s/foo/bar/’ sustituye foo por bar solo en las líneas del 5 al 10. Si se omite la dirección, la acción se aplica a todas las líneas.
Operaciones más comunes
- Sustitución: la orden s/patrón/reemplazo/flags cambia la primera coincidencia de patrón en cada línea. Agregando la bandera g se sustituyen todas las coincidencias.
- Eliminación: la orden d borra las líneas que coinciden con la dirección dada. Por ejemplo, ‘/^#/d’ elimina todas las líneas que comienzan con el símbolo de almohadilla.
- Inserción: con i\ texto se inserta texto antes de la línea seleccionada, mientras que a\ texto lo agrega después.
- Impresión: la orden p muestra líneas que cumplen una condición, útil cuando se combina con la opción -n para suprimir la salida automática.
Ejemplos prácticos
- Cambiar la extensión de varios archivos en un listado: ls | sed ‘s/\.txt$/\.md/’
- Eliminar comentarios de un script de shell: sed ‘/^#/d’ script.sh > script_limpio.sh
- Agregar numeración de líneas a un archivo: sed ‘=’ archivo | sed ‘N;s/\n/\t/’
- Convertir direcciones de correo a minúsculas: sed ‘s/.*/\L&/’ entrada.txt
Uso avanzado
Sed permite encadenar múltiples expresiones usando -e o simplemente separándolas con punto y coma dentro de una sola comilla. Por ejemplo, sed -e ‘s/foo/bar/’ -e ‘s/baz/qux/’ archivo aplica ambas sustituciones. También dispone de dos espacios de trabajo: el patrón space y el hold space. Con las órdenes h, H, g, G y x podemos mover datos entre ellos, lo que permite realizar transformaciones que dependen de líneas anteriores o posteriores, como duplicar líneas o crear resúmenes.
Otra característica poderosa es la capacidad de leer guiones de comandos desde un archivo con -f script.sed, lo que facilita la reutilización de rutinas complejas en diferentes proyectos.
Consejos y buenas prácticas
- Siempre pruebe sus comandos con una copia de seguridad o usando la salida estándar antes de aplicar -i.
- Utilice comillas simples alrededor del script de sed para evitar que el shell expanda variables o interprete barras invertidas.
- Cuando necesite incluir una barra diagonal en el patrón de sustitución, considere usar un delimitador diferente, por ejemplo, s|ruta/antigua|ruta/nueva|.
- Aproveche la opción -n junto con p para imprimir solo lo que realmente necesita, reduciendo el ruido en la salida.
- Documente sus scripts de sed con comentarios dentro del archivo .sed, comenzando cada línea con #.
Conclusión
El comando sed sigue siendo una pieza clave para cualquier persona que trabaje con texto en Linux. Su capacidad de procesar flujos de forma rápida, su sintaxis flexible y su bajo consumo de recursos lo hacen ideal para tareas simples de sustitución y para scripts de transformación más elaborados. Dominar sed no solo ahorra tiempo, sino que también abre la puerta a la automatización eficiente de procesos que de otro modo requerirían programación más compleja. Le invitamos a practicar los ejemplos mostrados y a explorar su manual para descubrir aún más trucos que harán su trabajo diario más productivo.