Comparar dos textos — Diff
Compara dos textos al instante en tu navegador. Vista lado a lado, resaltado palabra por palabra, exportación a diff unificado, opciones para ignorar mayúsculas/espacios/líneas vacías. 100 % navegador — sin uploads.
Opciones a ignorar
¿Qué es un diff de texto?
Un diff de texto es una comparación estructurada de dos documentos textuales que encuentra el conjunto más pequeño de inserciones y eliminaciones que transforma uno en el otro. La salida hace visible el cambio: verde para líneas añadidas, rojo para eliminadas, en lado a lado o como patch unificado (el formato `---/+++/@@` usado por `git`, GitHub y el comando Unix `patch`).
Bajo el capó, todo diff moderno es un algoritmo de subsecuencia común más larga (LCS). El artículo de Eugene Myers de 1986 en O((N+M)D) es la implementación canónica eficiente; la programación dinámica clásica (usada aquí, con recorte de prefijo/sufijo común) es más simple y funciona perfectamente para entradas web típicas. Una vez alineadas las líneas, los pares vecinos de eliminación + adición pasan por una segunda LCS a nivel de token para que el renderizador resalte solo las palabras que realmente cambiaron dentro de una línea — lo que los revisores llaman diff intra-línea o palabra por palabra.
¿Por qué no comparar las cadenas carácter a carácter? Porque las ediciones rara vez son planas: insertar una línea en mitad de un archivo de 200 líneas desplaza todas las de abajo. Un `===` ingenuo declararía las 199 líneas diferentes. LCS dice la verdad: una línea añadida, 199 sin cambios.
Esta herramienta ejecuta toda la comparación en tu navegador. Sin subir archivos, sin archivo temporal, sin logs. Segura para código propietario, contratos anotados, logs privados y cualquier cosa que te incomodaría pegar en un servidor de terceros. ¿Necesitas comparar JSON? Usa el JSON Diff estructural para que el orden de claves y los espacios dejen de ser ruido. ¿Vas a comparar dos configuraciones en YAML o CSV? Conviértelas primero con YAML a JSON o JSON a CSV y luego compara con la herramienta adecuada para el formato.
// Two strings that look 'mostly the same' but a naïve check disagrees const a = 'hello world'; const b = 'hello, world!'; // Character equality a === b; // false — but only 3 characters actually changed. // LCS-style diff (this tool, at line + word granularity) // → 1 line modified, inline highlight: 'hello[, ]world[!]' // → unified patch: // --- original // +++ modified // @@ -1 +1 @@ // -hello world // +hello, world!
Características clave
Lado a lado + Unificado
Alterna entre la vista visual de dos columnas (para revisión humana) y el formato canónico de patch unificado (para `git apply`, herramientas de revisión de código e informes de bugs).
Resaltado inline palabra por palabra
Cuando dos líneas se emparejan como modificadas, solo los tokens cambiados llevan fondo de color. Tu ojo encuentra la edición al instante en lugar de escanear 80 caracteres.
Ignorar mayúsculas / espacios / vacías
Cuatro interruptores independientes: mayúsculas, todos los espacios, solo espacios finales, líneas vacías. Replica `git diff -i -w -b` en un par de clics.
Exportación a diff unificado
Copia un patch `---/+++/@@` limpio con tres líneas de contexto. Encaja directo en un comentario de PR, un informe de bug o `patch -p1`.
100 % en el navegador
Las entradas nunca salen del dispositivo. Sin subir archivos, sin analítica sobre el texto. Funciona sin conexión una vez cargada la página. Segura para código propietario y prosa confidencial.
Unicode + RTL
Tokeniza en los límites de palabra de Unicode. Árabe, hebreo y CJK se comparan limpiamente; las variantes de fin de línea (CRLF, LF, CR) se normalizan todas.
Ejemplos
Revisión de código — renombrado de una variable
function getUser(id) {
const u = db.users.find(x => x.id === id);
return u;
} function getUser(userId) {
const u = db.users.find(x => x.id === userId);
return u;
} La vista lado a lado destaca cada línea que contiene el renombrado, mientras que el diff palabra por palabra atenúa los tokens sin cambios para que el revisor vea exactamente qué identificador cambió.
Edición de contrato — una cláusula añadida
1. The service is provided as-is. 2. Either party may terminate with 30 days notice. 3. Disputes are resolved in California courts.
1. The service is provided as-is. 2. Either party may terminate with 30 days notice. 2a. Termination notice must be in writing. 3. Disputes are resolved in California courts.
Una sola cláusula insertada (línea 2a) es la única diferencia. Las líneas de contexto que la rodean se mantienen limpias — útil para revisar contratos o documentos de política en modo control de cambios.
Investigación de logs — tiempos de petición cambiados
GET /api/users 200 14ms POST /api/orders 201 88ms GET /api/orders/42 200 21ms
GET /api/users 200 14ms POST /api/orders 201 4200ms GET /api/orders/42 500 21ms
Cambian dos líneas. El resaltado inline muestra la deriva de latencia 88ms → 4200ms y el código de estado 200 → 500. Cronología de incidente lista para usar.
Espacios al final — opción « Ignorar espacios finales »
margin: 0; padding: 0; border: none;
margin: 0; padding: 0; border: none;
Sin la opción, la línea 1 reporta una diferencia (espacios finales). Activa « Ignorar espacios / tabulaciones finales » y el diff baja a cero — el mismo truco que hace `git diff -b`.
Cómo usar
- 1
Pega ambas versiones
Texto original a la izquierda, modificado a la derecha. El diff en vivo se renderiza mientras escribes; las entradas grandes (>200 KB combinadas) cambian a un botón Diff manual.
- 2
Activa las opciones de ignorar que necesites
Ignorar mayúsculas, ignorar todos los espacios, ignorar espacios finales o ignorar líneas vacías — cada una independiente y persistida entre visitas.
- 3
Lee el diff o llévate el patch
Lado a lado para revisión humana, Unificado para el formato `---/+++/@@`. « Copiar diff unificado » envía un patch limpio al portapapeles para revisión de código o `patch -p1`.
Trampas comunes del diff
Archivo entero « cambiado » tras copiar entre Windows y Unix
Si pegas desde Notepad en Windows en un original editado en Unix, cada línea mostrará diferencias por \r. Activa « Ignorar espacios / tabulaciones finales » para silenciar los caracteres CR.
Diff: 200 modifications (all because of trailing \r)
Ignore trailing spaces / tabs → 2 real changes
El diff de indentación grita
Reformatear tabulaciones ↔ espacios hace explotar los diffs línea por línea. « Ignorar todos los espacios » colapsa el diff a los cambios semánticos reales.
Diff: 87 modifications (all are indent changes)
Ignore all whitespace → 4 actual changes
Párrafos idénticos marcados por una línea en blanco
Añadir o eliminar una sola línea vacía en prosa puede desalinear toda una región. « Ignorar líneas vacías » lo arregla sin tocar el contenido.
Diff: paragraph 2 'completely changed' (one blank line moved)
Ignore blank lines → no changes in paragraph 2
El diff dice « idéntico » pero los archivos son distintos
Casi siempre es una opción de « Ignorar » mayúsculas o espacios que quedó activada de una sesión anterior. Abre el panel « Opciones a ignorar » — ahí están todas las casillas. Desactívalas todas si quieres una comparación byte-strict.
0 differences shown, but `cmp` says the files differ
Disable all Ignore options → real diff appears
JSON pegado que parece « todo cambiado »
El diff de texto trata el orden de las claves como significativo; JSON no. Para payloads JSON, usa la herramienta dedicada JSON Diff — ignora el orden de claves y respeta la estricteza de tipos.
Text diff on JSON: 100% of lines changed (just a key reorder)
<a href="/es/tools/json-diff">JSON Diff</a>: 0 differences
Aviso de diff truncado ignorado
Por encima de 5 000 líneas por lado, la entrada se recorta. Si aparece el aviso, cambia a línea de comandos `diff -u file1 file2` o `git diff --no-index` — ambos hacen streaming y manejan gigabytes.
Pasted a 20,000-line log — only first 5,000 lines diffed
`diff -u a.log b.log` in terminal handles full file
Casos de uso comunes
- Fragmento de revisión de código
- Suelta dos versiones de una función en los cuadros para ver de un vistazo un renombrado, una rama eliminada o una nueva cláusula de guarda. El resaltado palabra por palabra es más rápido que escanear el diff de GitHub para un cambio de una línea.
- Línea roja de contrato / política
- Pega el contrato de ayer frente a la revisión de hoy. Las cláusulas insertadas saltan a la vista; los párrafos sin cambios colapsan a gris. Exporta el patch unificado para el rastro de revisión legal.
- Investigación de cronología de logs
- Compara el corte de logs previo al incidente de un SRE con el corte durante el incidente. Latencia, código de estado y deriva de frecuencia afloran al instante sin `awk`.
- Revisión de prosa / borrador
- Pega un borrador y la versión de tu editor. El diff palabra por palabra muestra exactamente qué frases se reescribieron — invaluable para aceptar o rechazar cambios uno por uno.
- Revisión de traducción
- Compara una traducción antigua contra una re-traducción para confirmar que la nueva copia preserva sentido, estructura y placeholders. Activa « Ignorar espacios finales » para silenciar el ruido que los traductores suelen introducir.
- Auditoría de .env / archivos de configuración
- Compara dos `.env`, `docker-compose.yaml` o archivos rc de shell. Con « Ignorar líneas vacías » activado, el diff se centra en las diferencias funcionales en vez de en el ruido de formato.
Detalles técnicos
- LCS con recorte de prefijo/sufijo
- Las líneas comunes al principio y al final se eliminan antes de ejecutar la LCS por programación dinámica. Un diff de « dos configs de 2 000 líneas con una sola línea cambiada » colapsa a una tabla DP de 1×1 y se renderiza en menos de un milisegundo.
- Diff intra-línea a nivel de token
- Los hunks adyacentes de eliminación + adición se emparejan y tokenizan mediante secuencias Unicode de palabra/no-palabra/espacio. Una segunda pasada de LCS produce los tramos verdes/rojos que hacen legibles las líneas modificadas.
- Diff unificado compatible con git/patch
- La salida sigue el formato `---/+++/@@ -L,C +L,C @@` definido para GNU patch y usado por Git, GitHub y todas las herramientas de revisión de código. Aplícalo con `pbpaste | patch -p0`.
- Límite de entrada de 5 000 líneas por lado
- Más allá del límite, el diff trunca y avisa. Para entradas de varios MB, usa `diff -u` en línea de comandos o `git diff --no-index` — hacen streaming y manejan gigabytes.
Buenas prácticas
- Elige las opciones de ignorar antes de leer
- El ruido de espacios finales, CRLF y mayúsculas ahoga la señal. Activa las opciones correctas primero; el diff es mucho más fácil de leer y dejarás de entrenarte para saltarte cambios 'falsos'.
- Usa Unificado para compartir y Lado a lado para revisar
- Las columnas visuales son para tus ojos. Los patches unificados son para las terminales de los demás. Un diff unificado copiado se cuela en un mensaje de Slack, un comentario de Jira o `patch -p1` sin traducción.
- Verifica con el % de similitud
- Si dos archivos son 'casi iguales' pero la similitud es del 30 %, tienes un problema de finales de línea o espacios. Activa « Ignorar todos los espacios » y vuelve a comprobar antes de leer el diff.
Preguntas frecuentes
¿El texto que pego se envía a tu servidor?
¿Cuál es la diferencia entre diff de texto y diff de JSON?
¿Cómo ignoro espacios, mayúsculas o líneas vacías?
¿Qué es un diff unificado (y cuándo lo copio)?
¿Por qué el diff muestra líneas enteras cambiadas si solo edité una palabra?
¿Cómo se manejan los finales de línea CRLF y LF?
¿Qué tan grandes pueden ser las dos entradas?
¿Y para comparar código? ¿Conoce mi lenguaje?
¿Por qué a veces una sola edición aparece como una línea eliminada más una añadida?
¿Cómo se calcula el porcentaje de similitud?
¿Puedo compartir un diff con un colega?
¿El diff maneja idiomas de derecha a izquierda como el árabe o el hebreo?
Herramientas relacionadas
Ver todas las herramientas →Probador de Regex Gratis — Depura Patrones en Línea
Procesamiento de Texto
Prueba patrones de expresiones regulares al instante contra cualquier texto. Resaltado de coincidencias en vivo, grupos de captura, vista previa de reemplazo, división y explicador. Regex JavaScript, 100% privado, sin registro.
Contador de Palabras y Caracteres Gratis
Procesamiento de Texto
Cuenta palabras, caracteres, oraciones, párrafos y tiempo de lectura al instante. Contador de palabras en tiempo real con límites de Twitter, meta descripción e Instagram. Gratis, privado y sin registro.
Conversor de Bases — Binario, Hex, Decimal, Octal
Herramientas de Conversión
Convierte números entre binario, hexadecimal, decimal, octal y cualquier base personalizada (2-36) al instante. Gratis, privado, sin registro — todo el procesamiento ocurre en tu navegador.
Decodificador y Codificador Base64
Codificación y Formato
Decodifica y codifica Base64 online de forma gratuita. Conversión en tiempo real con soporte completo de UTF-8 y emojis. 100% privado — funciona en tu navegador. Sin registro.
Generador Crontab y Constructor de Expresiones Cron
Fecha y Hora
Construye, valida y decodifica expresiones cron en el navegador. Vista previa de próximas ejecuciones en hora local o UTC. POSIX 5 campos, presets y descripción natural. Gratis y privado.
Convertidor de CSV a JSON
Codificación y Formato
Convierte CSV a JSON en tu navegador. RFC 4180, inferencia de tipos, fila de cabecera, seguro para big-int. 100% privado, sin carga.