Watch at EaseHistorias. Respuestas. Perspectiva.

Tecnología · GUÍA PRÁCTICA

¿sed -i funciona en Linux y falla en macOS? Prueba los límites antes de editar

Identifica la implementación de sed y el argv exacto, previsualiza la transformación y elige una política explícita de copia o temporal.

es sed argument boundary diagram
Ilustración editorial original: verify the sed implementation and argument boundary. Watch at Ease

Cuando sed -i funciona en Linux y falla en macOS, el comando visible no basta. GNU y la familia BSD definen el sufijo in-place de manera diferente, y el shell decide los tokens reales.

Conserva el origen, identifica la implementación y previsualiza stdout antes de probar una rama de copia o sustitución. Ese orden evita una edición destructiva.

Captura implementación y argumentos

Registra la ruta del ejecutable, la versión, el sistema, el shell, el comando exacto y los nombres resultantes. No llames a toda diferencia un problema de comillas: demuestra primero qué sed analizó los argumentos.

Expande variables y matrices del shell antes de cambiar nada. Un comando copiado de Linux puede llegar a sed de la familia BSD con límites de tokens distintos aunque la línea se vea igual.

Separa las reglas del sufijo

GNU sed documenta un sufijo opcional para -i. Sin sufijo sobrescribe sin copia; con sufijo renombra el original. Agrupar opciones cortas cambia el significado: -Ei y -iE no son equivalentes.

El manual de FreeBSD documenta una extensión después de -i. Una extensión vacía evita la copia y una no vacía determina su nombre. Trata la extensión como dato observable.

Previsualiza antes de editar

Ejecuta la expresión sin -i sobre una copia y dirige stdout a un temporal nuevo. Compara salida y entrada, cuenta líneas, revisa codificación y confirma el patrón esperado.

Así separas el programa sed de la sustitución. Si la vista previa falla, corrige el modo regex, escapes, delimitadores o saltos de línea antes de probar edición in-place.

Elige una estrategia acotada

En entornos controlados, detecta la implementación y usa una rama probada con sufijo explícito. Para scripts portables, valida una salida temporal antes de reemplazar.

No dependas solo de sed --version si otra implementación lo rechaza. Usa una prueba cuyo fallo se controle, un contrato de plataforma del build o un flujo estándar con temporal.

Exige prueba final y rollback

Prueba archivos sin coincidencia, con varias, rutas con espacios, salto final y copia previa. Confirma resultado, código de salida y política de backup en cada runner.

Despliega primero en pequeño. El éxito exige contenido correcto, bytes ajenos estables y solo los archivos previstos. Si falla, conserva entrada y argv en vez de reintentar de forma destructiva.

es sed preview and replacement diagram
Ilustración editorial original: preview and compare before replacing the source file. Watch at Ease