diffes una utilidad de línea de comandos que le permite comparar dos archivos línea por línea. También puede comparar el contenido de los directorios.
El diffcomando se usa más comúnmente para crear un parche que contiene las diferencias entre uno o más archivos que se pueden aplicar usando el patchcomando.
Cómo usar el diffcomando
La sintaxis del diffcomando es la siguiente:
diff [OPTION]... FILES
El diffcomando puede mostrar la salida en varios formatos, siendo los formatos normal, contextual y unificado los más comunes. La salida incluye información sobre qué líneas en los archivos deben cambiarse para que sean idénticos. Si los archivos coinciden, no se produce ningún resultado.
Para guardar la salida del comando en un archivo, use el operador de redirección:
diff file1 file2 > patch
En este artículo, usaremos los siguientes dos archivos para explicar cómo funciona el diffcomando:
Ubuntu
Arch Linux
Debian
CentOS
Fedora
Kubuntu
Ubuntu
Debian
Arch Linux
Centos
Fedora
formato normal
En su forma más simple, cuando el diffcomando se ejecuta en dos archivos de texto sin ninguna opción, produce una salida en el formato normal:
diff file1 file2
La salida se verá algo como esto:
0a1
> Kubuntu
2d2
< Arch Linux
4c4,5
< CentOS
---
> Arch Linux
> Centos
El formato de salida normal consta de una o más secciones que describen las diferencias. Cada sección se ve así:
change-command
< from-file-line...
---
> to-file-line...
0a1, 2d2y 4c4,5son comandos de cambio. Cada comando de cambio contiene lo siguiente, de izquierda a derecha:
- El número de línea o rango de líneas en el primer archivo.
- Un carácter de cambio especial.
- El número de línea o rango de líneas en el segundo archivo.
El carácter de cambio puede ser uno de los siguientes:
a- Añadir las líneas.c- Cambiar las líneas.d- Eliminar las líneas.
El comando de cambio va seguido de las líneas completas que se eliminan ( <) y se agregan al archivo ( >).
Expliquemos la salida:
0a1- Añadir línea1del segundo archivo al principio del archivo1 (después de la línea0).> Kubuntu- La línea de la segunda línea que se agrega al primer archivo como se describe arriba.
2d2- Eliminar línea2en el primer archivo. El símbolo2posteriordsignifica que si la línea no se elimina, aparecerá en línea2en el segundo archivo.< Arch Linux- la línea eliminada.
4c4,5- Reemplazar (cambiar) línea5en el primer archivo con líneas4-5del segundo archivo.< CentOS- La línea en el primer archivo a ser reemplazado.---- Separador.> Arch Linuxy> Centos- Líneas del segundo archivo reemplazando la línea del primer archivo.
Formato de contexto
Cuando se utiliza el formato de salida de contexto, el diffcomando muestra varias líneas de contexto alrededor de las líneas que difieren entre los archivos.
La -copción le dice diffa producir salida en el formato de contexto:
diff -c file1 file2
*** file1 2019-11-25 21:00:26.422426523 +0100
--- file2 2019-11-25 21:00:36.342231668 +0100
***************
*** 1,6 ****
Ubuntu
- Arch Linux
Debian
! CentOS
Fedora
--- 1,7 ----
+ Kubuntu
Ubuntu
Debian
! Arch Linux
! Centos
Fedora
El resultado comienza con los nombres y las marcas de tiempo de los archivos que se comparan, y una o más secciones que describen las diferencias. Cada sección se ve así:
***************
*** from-file-line-numbers ****
from-file-line...
--- to-file-line-numbers ----
to-file-line...
from-file-line-numbersyto-file-line-numbers- Los números de línea o el rango de líneas separadas por comas en el primer y segundo archivo, respectivamente.from-file-lineyto-file-line- Las líneas que difieren y las líneas de contexto:- Las líneas que comienzan con dos espacios son líneas de contexto, las líneas que son iguales en ambos archivos.
- Las líneas que comienzan con el símbolo menos (
-) son las líneas que no corresponden a nada en el segundo archivo. Faltan líneas en el segundo archivo. - Las líneas que comienzan con el símbolo más (
+) son las líneas que no corresponden a nada en el primer archivo. Faltan líneas en el primer archivo. - Las líneas que comienzan con el signo de exclamación (
!) son las líneas que se cambian entre dos archivos. Cada grupo de líneas que comienza con!desde el primer archivo tiene una coincidencia correspondiente en el segundo archivo.
Vamos a explicar las partes más importantes de la salida:
- En este ejemplo, solo tenemos una sección que describe las diferencias.
*** 1,6 ****y--- 1,7 ----nos dice el rango de las líneas del primer y segundo archivo que se incluyen en esta sección.- Las líneas
Ubuntu,Debian,Fedoray la última línea vacía son las mismas en ambos archivos. Estas líneas comienzan con doble espacio. - La línea
- Arch Linuxdel primer archivo no corresponde a nada en el segundo archivo. Aunque esta línea también existe en el segundo archivo, las posiciones son diferentes. - La línea
+ Kubuntudel segundo archivo no corresponde a nada en el primer archivo. - La línea
! CentOSdel primer archivo y las líneas! Arch Linuxy! CentOSdel segundo archivo se cambian entre los archivos.
De forma predeterminada, el número de líneas de contexto es tres. Para especificar otro número utilice la opción -C( ):--contexts
diff -C 1 file1 file2
*** file1 2019-11-25 21:00:26.422426523 +0100
--- file2 2019-11-25 21:00:36.342231668 +0100
***************
*** 1,5 ****
Ubuntu
- Arch Linux
Debian
! CentOS
Fedora
--- 1,6 ----
+ Kubuntu
Ubuntu
Debian
! Arch Linux
! Centos
Fedora
Formato unificado
El formato de salida unificado es una versión mejorada del formato de contexto y produce una salida más pequeña.
Use la -uopción para indicar diffque imprima la salida en el formato unificado:
diff -u file1 file2
--- file1 2019-11-25 21:00:26.422426523 +0100
+++ file2 2019-11-25 21:00:36.342231668 +0100
@@ -1,6 +1,7 @@
+Kubuntu
Ubuntu
-Arch Linux
Debian
-CentOS
+Arch Linux
+Centos
Fedora
La salida comienza con los nombres y las marcas de tiempo de los archivos y una o más secciones que describen las diferencias. Cada sección toma la siguiente forma:
***************
@@ from-file-line-numbers to-file-line-numbers @@
line-from-files...
@@ from-file-line-numbers to-file-line-numbers @@- El número de línea o rango de las líneas del primer y segundo archivos incluidos en esta sección.line-from-files- Las líneas que se diferencian y las líneas de contexto:- Las líneas que comienzan con dos espacios son líneas de contexto, las líneas que son iguales en ambos archivos.
- Las líneas que comienzan con el símbolo menos (
-) son las líneas que se eliminan del primer archivo. - Las líneas que comienzan con el símbolo más (
+) son las líneas que se agregan desde el primer archivo.
Ignorar caso
Como puede notar en los ejemplos anteriores, el diffcomando distingue entre mayúsculas y minúsculas de manera predeterminada.
Utilice la -iopción para indicar diffque ignore el caso:
diff -ui file1 file2
--- file1 2019-11-25 21:00:26.422426523 +0100
+++ file2 2019-11-25 21:00:36.342231668 +0100
@@ -1,6 +1,7 @@
+Kubuntu
Ubuntu
-Arch Linux
Debian
+Arch Linux
CentOS
Fedora
Conclusión
Comparar archivos de texto en busca de diferencias es una de las tareas más comunes para los administradores de sistemas Linux.
El diffcomando compara archivos línea por línea. Para obtener más información, escriba man diffen su terminal.
Si tiene alguna pregunta, por favor deje un comentario a continuación.

0 Comentarios