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:

  1. cat lista-compra1.txt
  2. yogures
  3. leche
  4. empanada
  5. pan
  6. harina
  7. manzanas
  8. castañas
  9. agua
  10. cerveza

Además de:

  1. cat lista-compra2.txt
  2. yogures
  3. leche
  4. empanada
  5. pan
  6. manzanas
  7. castañas
  8. agua
  9. cerveza
  10. aceitunas
  11. anchoas

Si los comparamos:

  1. diff lista-compra1.txt lista-compra2.txt
  2. 5d4
  3. < harina
  4. 9a10,11
  5. > aceitunas
  6. > 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:

  1. diff -c lista-compra1.txt lista-compra2.txt
  2. *** lista-compra1.txt   2019-11-14 18:41:01.925144096 +0000
  3. --- lista-compra2.txt   2019-11-14 18:41:19.565239807 +0000
  4. ***************
  5. *** 2,9 ****
  6.   leche
  7.   empanada
  8.   pan
  9. - harina
  10.   manzanas
  11.   castañas
  12.   agua
  13.   cerveza
  14. --- 2,10 ----
  15.   leche
  16.   empanada
  17.   pan
  18.   manzanas
  19.   castañas
  20.   agua
  21.   cerveza
  22. + aceitunas
  23. + 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:

  1. diff -u lista-compra1.txt lista-compra2.txt
  2. --- lista-compra1.txt   2019-11-14 18:41:01.925144096 +0000
  3. +++ lista-compra2.txt   2019-11-14 18:41:19.565239807 +0000
  4. @@ -2,8 +2,9 @@
  5.  leche
  6.  empanada
  7.  pan
  8. -harina
  9.  manzanas
  10.  castañas
  11.  agua
  12.  cerveza
  13. +aceitunas
  14. +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).

Fuentes consultadas:

https://linuxhandbook.com/diff-command/

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.