diff significa diferencia . Este comando se utiliza para mostrar las diferencias en los archivos comparándolos línea por línea. A diferencia de sus compañeros, cmp y comm , nos dice qué líneas en un archivo deben cambiarse para que los dos archivos sean idénticos.
Lo importante que debe recordar es que diff usa ciertos símbolos e instrucciones especiales que se requieren para hacer que dos archivos sean idénticos. Le indica las instrucciones sobre cómo cambiar el primer archivo para que coincida con el segundo archivo.
Los símbolos especiales son:
a : add c : change d : delete
Sintaxis:
diff [options] File1 File2
Digamos que tenemos dos archivos con nombres a.txt y b.txt que contienen 5 estados indios.
$ls a.txt b.txt $cat a.txt Gujarat Uttar Pradesh Kolkata Bihar Jammu and Kashmir $cat b.txt Tamil Nadu Gujarat Andhra Pradesh Bihar Uttar pradesh
Ahora, aplicando el comando diff sin ninguna opción obtenemos el siguiente resultado:
$diff a.txt b.txt 0a1 > Tamil Nadu 2,3c3 < Uttar Pradesh Andhra Pradesh 5c5 Uttar pradesh
Echemos un vistazo a lo que significa esta salida. La primera línea de la salida diff contendrá:
- Números de línea correspondientes al primer archivo,
- Un símbolo especial y
- Números de línea correspondientes al segundo archivo.
Como en nuestro caso, 0a1 , lo que significa que después de las líneas 0 (al principio del archivo) debe agregar Tamil Nadu para que coincida con el número de línea 1 del segundo archivo. Luego nos dice cuáles son esas líneas en cada archivo precedido por el símbolo:
- Las líneas precedidas por un < son líneas del primer archivo.
- Las líneas precedidas por > son líneas del segundo archivo.
- La siguiente línea contiene 2,3c3 , lo que significa que de la línea 2 a la línea 3 en el primer archivo debe cambiarse para que coincida con la línea número 3 en el segundo archivo. Luego nos dice esas líneas con los símbolos anteriores.
- Los tres guiones («—») simplemente separan las líneas del archivo 1 y el archivo 2.
Como resumen para que ambos archivos sean idénticos, primero agregue Tamil Nadu en el primer archivo al principio para que coincida con la línea 1 del segundo archivo, luego cambie las líneas 2 y 3 del primer archivo, es decir, Uttar Pradesh y Kolkata con la línea 3 del segundo archivo, es decir. Andhra Pradesh . Después de eso, cambie la línea 5 del primer archivo, es decir, Jammu y Cachemira , por la línea 5 del segundo archivo, es decir, Uttar Pradesh .
Ahora veamos cómo se ve cuando diff nos dice que necesitamos eliminar una línea.
$cat a.txt Gujarat Andhra Pradesh Telangana Bihar Uttar pradesh $cat b.txt Gujarat Andhra Pradesh Bihar Uttar pradesh $diff a.txt b.txt 3d2 < Telangana
Aquí, la salida 3d2 anterior significa eliminar la línea 3 del primer archivo, es decir, Telangana , para que ambos archivos se sincronicen en la línea 2.
Opciones
El sistema Linux ofrece dos formas diferentes de ver la salida del comando diff , es decir, el modo contextual y el modo unificado .
1. -c (contexto): para ver las diferencias en el modo de contexto, use la opción -c . Tratemos de entender esto con un ejemplo, tenemos dos archivos file1.txt y file2.txt :
$cat file1.txt cat mv comm cp $cat file2.txt cat cp diff comm $diff -c file1.txt file2.txt *** file1.txt Thu Jan 11 08:52:37 2018 --- file2.txt Thu Jan 11 08:53:01 2018 *************** *** 1,4 **** cat - mv - comm cp --- 1,4 ---- cat cp + diff + comm
El primer archivo se indica con *** y el segundo archivo se indica con — .
La línea con *************** es solo un separador.
Las primeras dos líneas de esta salida nos muestran información sobre el archivo 1 y el archivo 2 . Enumera el nombre del archivo, la fecha de modificación y la hora de modificación de cada uno de nuestros archivos, uno por línea.
La siguiente línea tiene tres asteriscos *** seguidos de un rango de líneas del primer archivo (en nuestro caso, las líneas 1 a 4, separadas por una coma). Luego cuatro asteriscos **** . Después de eso, muestra el contenido del primer archivo con los siguientes indicadores:
(i) Si la línea debe permanecer sin cambios, se antepone con dos espacios.
(ii) Si es necesario cambiar la línea, se antepone un símbolo y un espacio. Los significados de los símbolos son los siguientes:
(a) + : Indica una línea en el segundo archivo que debe agregarse al primer archivo para hacerlos idénticos.
(b) – : Indica una línea en el primer archivo que debe eliminarse para que sean idénticos.
Como en nuestro caso, es necesario eliminar mv y comm del primer archivo y agregar diff y comm al primer archivo para que ambos sean idénticos.
Después de eso, hay tres guiones , seguidos de un rango de líneas del segundo archivo (en nuestro caso, las líneas 1 a 4, separadas por una coma). Luego cuatro guiones —- . Luego muestra el contenido del segundo archivo.
2. -u (unificado): para ver las diferencias en modo unificado, utilice la opción -u . Es similar al modo de contexto pero no muestra ninguna información redundante o muestra la información en forma concisa.
$cat file1.txt cat mv comm cp $cat file2.txt cat cp diff comm $diff -u file1.txt file2.txt --- file1.txt 2018-01-11 10:39:38.237464052 +0000 +++ file2.txt 2018-01-11 10:40:00.323423021 +0000 @@ -1,4 +1,4 @@ cat -mv -comm cp +diff +comm
El primer archivo se indica con — y el segundo archivo se indica con +++ .
Las primeras dos líneas de esta salida nos muestran información sobre el archivo 1 y el archivo 2 . Enumera el nombre del archivo, la fecha de modificación y la hora de modificación de cada uno de nuestros archivos, uno por línea.
Después de eso, la siguiente línea tiene dos arrobas @ seguidas de un rango de líneas del primer archivo (en nuestro caso, las líneas 1 a 4, separadas por una coma) con el prefijo – y luego un espacio y luego otra vez seguido de un rango de líneas del segundo archivo precedido por + y al final dos en el signo @. Seguido por el contenido del archivo en la salida, nos dice qué línea permanece sin cambios y qué líneas deben agregarse o eliminarse (indicadas por símbolos) en el archivo 1 para que sea idéntico al archivo 2 .
3. -i: De forma predeterminada, este comando distingue entre mayúsculas y minúsculas . Para hacer que este comando no distinga entre mayúsculas y minúsculas, use la opción -i con diff .
$cat file1.txt dog mv CP comm $cat file2.txt DOG cp diff comm Without using this option: $diff file1.txt file2.txt 1,3c1,3 < dog < mv DOG > cp > diff Using this option: $diff -i file1.txt file2.txt 2d1 diff
4. –version: esta opción se usa para mostrar la versión de diff que se está ejecutando actualmente en su sistema.
$diff --version diff (GNU diffutils) 3.5 Packaged by Cygwin (3.5-2) Copyright (C) 2016 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later . This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Written by Paul Eggert, Mike Haertel, David Hayes, Richard Stallman, and Len Tower.
?t=204
Referencias:
Conceptos y aplicaciones de Unix – Das, Sumitabha
Computer Hope
Publicación traducida automáticamente
Artículo escrito por AKASH GUPTA 6 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA