Ejemplos prácticos del comando diff en Linux
Vemos diferentes ejemplos prácticos del comando diff en GNU/Linux. Para quien no lo conozca este comando se encarga de comparar dos archivos, que contienen un texto similar. Genial para comparar diferentes versiones de un fichero de configuración de un servicio o del código de desarrollo de una aplicación.
¿Cómo funciona el comando diff?
En el caso más simple, diff compara los contenidos de dos ficheros, un fichero origen y un fichero destino. Pero no queda ahí la cosa, ya que también sirve para comparar directorios. Comparando su contenido en orden alfabético.
Su uso básico es el siguiente:
diff [opciones] fichero-origen fichero-destino
La mejor manera de aprender es practicando, así que ahí van diferentes ejemplos de uso.
1. Comando diff sin parámetros
A modo de ejemplo vamos a comparar dos ficheros, cada uno de ellos, diferentes versiones de una misma lista de la compra, con el contenido:
cat lista-compra1.txtyogures
leche
empanada
pan
harina
manzanas
castañasagua
cerveza
Además de:
cat lista-compra2.txtyogures
leche
empanada
pan
manzanas
castañasagua
cerveza
aceitunas
anchoas
Si los comparamos:
diff lista-compra1.txt lista-compra2.txt5d4
< harina9a10,11> aceitunas> anchoas
De esta manera nos indica las diferencias entre ambos ficheros.
Es cierto que la información que nos muestra el programa no es «friendly»
Para poder comprender esta información tenemos que saber como trabaja diff. Lo principal es que el segundo fichero indicado es el que se utiliza como referencia. Podemos decir entonces, que el primer fichero indicado sería el fichero a editar y el segundo el fichero de referencia.
Además, en la salida se utilizan una serie de símbolos que debemos conocer:
- a – Añadido
- c – Cambiado
- d – Borrado
- # Número de línea
- — Ficheros separados en la salida
- < Fichero 1
- > Fichero 2
2. Usando el contexto
La opción de contexto, con el parámetro «-c» proporciona una representación más visual sobre la información mostrada por defecto. Continuamos con el mismo ejemplo.
Aprovechamos para listar los símbolos más importantes utilizados:
- + – Añadido
- ! – Cambio
- – – Borrado
- *** – Fichero 1
- — – Fichero 2
Veamos el mismo resultado anterior, pero añadiendo el parámetro «-c«, como sigue:
diff -c lista-compra1.txt lista-compra2.txt
*** lista-compra1.txt 2019-11-14 18:41:01.925144096 +0000
--- lista-compra2.txt 2019-11-14 18:41:19.565239807 +0000
****************** 2,9 ****
leche
empanada
pan
- harina
manzanas
castañasagua
cerveza
--- 2,10 ----
leche
empanada
pan
manzanas
castañasagua
cerveza
+ aceitunas
+ anchoas
Es mucho más fácil de entender la información de esta manera. En lugar de la salida alfanumérica, el nuevo conjunto de símbolos nos ayuda a identificar rápidamente las diferencias entre los dos archivos.
Se nos indica que el segundo fichero, que es el de referencia, tiene dos productos más que el otro que tiene uno menos.
3. Líneas de contexto de forma unificada
En lugar de mostrar los dos archivos por separado, los combina.
Con el resultado:
diff -u lista-compra1.txt lista-compra2.txt
--- lista-compra1.txt 2019-11-14 18:41:01.925144096 +0000
+++ lista-compra2.txt 2019-11-14 18:41:19.565239807 +0000
@@ -2,8 +2,9 @@
leche
empanada
pan
-harinamanzanas
castañasagua
cerveza
+aceitunas
+anchoas
Como podemos ver nos muestra la información con los mismos símbolos que antes. En este caso con «–» y «+«, esto es, en el segundo documento nos falta la harina, que no lo tiene el primero. En cambio en el segundo tenemos de más las aceitunas y las anchoas.
4. Tip extra
La salida del comando diff -u es la que se utiliza habitualmente para crear archivos de parche (patch). Puedes guardar las diferencias en un archivo así:
diff -u lista1.txt lista2.txt > cambios.patch
5. Resumen rápido
| Parámetro | Función |
|---|---|
-u |
Formato unificado (el más común y legible). |
-c |
Formato de contexto (muestra líneas antes y después). |
-i |
Ignora mayúsculas y minúsculas al comparar. |
-w |
Ignora todos los espacios en blanco. |
-r |
Compara directorios de forma recursiva. |
-y |
Muestra la salida en dos columnas (side-by-side). |



Comentarios Recientes