J'ai deux fichiers qui, lorsque je compare avec diff, montrent que chaque ligne a changé. Lorsque je les compare avec diff -w
(en ignorant les espaces blancs), cela montre les quelques changements minimes que j'attends.
Évidemment, il y a une certaine différence entre les espaces dans chaque fichier, mais je ne sais pas ce qu'ils sont ni comment les trouver. J'ai essayé d'éditer les fichiers pour m'assurer que l'espace est en fait des caractères d'espacement (par opposition aux tabulations) mais je ne sais pas quoi faire d'autre.
J'ai utilisé vim avec :set list on
pour confirmer qu'il n'y avait pas d'espace de fuite à la fin des lignes.
Je crois également que chaque fichier a des terminateurs de ligne Linux car vim n'affiche pas le ^M
à la fin des lignes.
la source
diff
mais de nombreux éditeurs ne rendent pas, par défaut de toute façon, cet espace visible.vim
utilisateur, avez-vous essayé d'utiliservimdiff file1 file2
pour voir quelles sont les différences?Réponses:
Pour les
vim
utilisateurs, il existe un utilitaire pratique pour afficher les différences exactes entre les fichiers:Cela mettra chaque fichier dans les fenêtres, côte à côte et les différences seront mises en évidence en couleur.
Quelques commandes utiles en
vimdiff
Une fois dans
vimdiff
, certaines commandes utiles sont:]c
: passer au prochain changement[c
: passer au changement précédentctrl-W ctrl-W
: passer à une autre fenêtrezo
: plis ouvertszc
: fermer les plisExemple
Voici un exemple de
vimdiff
dans unxterm
deux versions comparant d'uncups
fichier de configuration:Vous pouvez voir que de longues sections de lignes identiques ont été réduites. Ils peuvent être rouverts avec
zo
.Le jeu de couleurs varie en fonction des paramètres de votre option. Dans l'exemple ci-dessus, lorsqu'une ligne apparaît dans un fichier mais pas dans l'autre, cette ligne reçoit un arrière-plan bleu foncé. Dans l'autre fichier, les lignes manquantes sont indiquées par des lignes en pointillés. Lorsqu'une ligne apparaît dans les deux fichiers mais présente quelques différences, les parties inchangées des lignes ont un fond rose et les parties modifiées ont un fond rouge.
la source
Sur FreeBSD ou la plupart des systèmes Linux, vous pouvez diriger la sortie de diff via
cat -v -e -t
pour afficher les différences d'espaces.Les onglets seront affichés comme
^I
, un$
sera affiché à la fin de chaque ligne afin que vous puissiez voir les espaces de fin, et les caractères non imprimables seront affichés comme^X
ouM-X
.Si vous avez des coreutils GNU (disponibles sur la plupart des distributions Linux non occupées), cela peut être simplifié pour
Sur les systèmes busybox, utilisez
catv -vet
.la source
L'un des fichiers a-t-il été modifié sur une machine Windows?
La terminaison de ligne standard sous Windows est CRLF, où sous Linux c'est simplement LF (et sur Mac c'était CR, mais je suppose que cela a changé depuis OS X).
Essayez
wc -l
les fichiers et voyez combien de lignes, puis voyez si la différence de taille est la même que le nombre de lignes (la dernière ligne peut ne pas se terminer dans un fichier).la source
od
peut aider. La commande Octal Dump peut afficher le contenu en hexadécimal. Cela peut vous aider à voir quels octets, y compris les octets nuls ou les espaces blancs inattendus, se trouvent dans un fichier. Les causes courantes possibles peuvent être LF vs CRLF, tabulations vs espaces ou ASCII vs Unicode (qui peuvent souvent avoir juste un octet nul avant chaque octet normalement visible).od -x filename
devrait révéler l'un de ces modèles. Si vous voulez une manière plus élaborée d'afficher le fichier, n'importe quel "éditeur hexadécimal" peut très bien fonctionner. Ceod
qui est bien, c'est que, comme lacut
commande, elle est intégrée à de nombreux systèmes Unix. Ainsi, souvent, aucune installation séparée n'est nécessaire.Si vous avez besoin que les fichiers soient plus similaires, vous
tr
pouvez apporter des modifications et ensed
faire plus. Je commencerais probablement parls -l
voir quel fichier est plus grand, puis afficher les octets pour voir ce qui doit être changé, puis changer l'un des fichiers afin qu'ils semblent plus similaires.la source
Pour savoir où se trouvent les vrais espaces et onglets, vous pouvez les remplacer en utilisant
sed
par exemple:Et maintenant, comparez les deux fichiers.
la source
cat
, comme dans superuser.com/a/913368/37154Le contenu suivant a été copié ici à partir de la section "question" ci-dessus, qui a été écrite par Romski.
Les deux
vimdiff
etdiff file1 file2 | cat -A
étaient très utiles du point de vue des outils.Enfin, j'ai trouvé un autre problème. Certains de mes fichiers ont été encodés avec la nomenclature UTF-8. Cela a été mis en évidence à l'aide de
diff file1 file2 | cat -A
. Cela s'est manifesté commeM-oM-;M-?
au début du fichier affecté:Bien qu'il y ait eu un certain nombre de problèmes, j'ai énuméré quelques commandes ci-dessous pour ceux qui ont besoin de nettoyer leurs fichiers:
la source