Je voudrais utiliser «diff» pour obtenir une différence à la fois entre les lignes et les caractères. Par exemple, considérez:
Fichier 1
abcde
abc
abcccd
Fichier 2
abcde
ab
abccc
En utilisant diff -u, j'obtiens:
@@ -1,3 +1,3 @@
abcde
-abc
-abcccd
\ No newline at end of file
+ab
+abccc
\ No newline at end of file
Cependant, cela ne me montre que des changements dans ces lignes. Ce que j'aimerais voir, c'est quelque chose comme:
@@ -1,3 +1,3 @@
abcde
-ab<ins>c</ins>
-abccc<ins>d</ins>
\ No newline at end of file
+ab
+abccc
\ No newline at end of file
Vous comprenez ma dérive.
Maintenant, je sais que je peux utiliser d' autres moteurs pour marquer / vérifier la différence sur une ligne spécifique. Mais je préfère utiliser un seul outil qui fait tout cela.
text
command-line
diff
VitalyB
la source
la source
Réponses:
Git a un mot diff, et définir tous les caractères comme des mots vous donne effectivement un caractère diff. Cependant, les modifications de nouvelle ligne sont ignorées .
Exemple
Créez un référentiel comme celui-ci:
Maintenant, faites
git diff --word-diff=color --word-diff-regex=. master^ master
et vous obtiendrez:Notez comment les ajouts et les suppressions sont reconnus au niveau des caractères, tandis que les ajouts et les suppressions de nouvelles lignes sont ignorés.
Vous pouvez également essayer l'une de ces solutions:
la source
git diff --word-diff=color --word-diff-regex=. file1 file2
--no-index
à la réponse de @ qwertzguys ci-dessus afin de la faire fonctionner pour moi en dehors d'un dépôt git. Donc:git diff --no-index --word-diff=color --word-diff-regex=. file1 file2
--no-index
intérieur d'un repoVous pouvez utiliser:
colordiff
est un package Ubuntu. Vous pouvez l'installer en utilisantsudo apt-get install colordiff
.diff-highlight
est de git (depuis la version 2.9). Il est situé dans/usr/share/doc/git/contrib/diff-highlight/diff-highlight
. Vous pouvez le mettre quelque part dans votre fichier$PATH
.la source
brew install colordiff
diff-highlight
dans$(brew --prefix git)/share/git-core/contrib/diff-highlight/diff-highlight
diff-highlight
peut également être installé avec le pip de python -pip install diff-highlight
(je le préfère même si git est installé via brew)La difflib de Python est ace si vous voulez faire cela par programme. Pour une utilisation interactive, j'utilise le mode diff de vim (assez simple à utiliser: il suffit d'appeler vim avec
vimdiff a b
). J'utilise aussi occasionnellement Beyond Compare , qui fait à peu près tout ce que vous pouvez espérer d'un outil de comparaison.Je n'ai vu aucun outil de ligne de commande qui le fasse utilement, mais comme Will le note, l'exemple de code difflib pourrait aider.
la source
Vous pouvez utiliser la
cmp
commande dans Solaris:la source
cmp
est également disponible sur (au moins certaines) distributions Linux.-l -b
.Python a nommé une bibliothèque pratique
difflib
qui pourrait aider à répondre à votre question.Voici deux oneliners utilisant
difflib
pour différentes versions de python.Ceux-ci peuvent être utiles en tant qu'alias de shell qui est plus facile à déplacer avec votre
.${SHELL_NAME}rc
.Et une version plus lisible à mettre dans un fichier autonome.
la source
A bien fonctionné pour moi. Le nombre le plus à gauche du résultat indique le nombre de caractères qui diffèrent.
la source
cmp -l file1 file2 | wc -l
J'ai également écrit mon propre script pour résoudre ce problème en utilisant l' algorithme de sous-séquence commune la plus longue.
Il est exécuté comme tel
JLDiff.py a.txt b.txt out.html
Le résultat est en HTML avec une coloration rouge et verte. Les fichiers plus volumineux prennent exponentiellement plus de temps à traiter, mais cela effectue une véritable comparaison caractère par caractère sans vérifier d'abord ligne par ligne.
la source
Couleur, caractère niveau
diff
ouputVoici ce que vous pouvez faire avec le script ci-dessous et diff-highlight (qui fait partie de git):
(Crédit à la réponse de @ retracile pour la
sed
mise en évidence)la source
command | gvim -
fera ce que vous voulez.git
mais pas placé sur votre chemin. Une de ma machine où elle vit/usr/share/doc/git/contrib/diff-highlight
.Le difflib de Python peut le faire.
La documentation comprend un exemple de programme de ligne de commande pour vous.
Le format exact n'est pas celui que vous avez spécifié, mais il serait simple d'analyser la sortie de style ndiff ou de modifier l'exemple de programme pour générer votre notation.
la source
Voici un outil de comparaison de texte en ligne: http://text-compare.com/
Il peut mettre en évidence chaque caractère différent et continue de comparer le reste.
la source
catdog
etcat\ndog
ne correspondra que surcat
Je pense que la solution la plus simple est toujours une bonne solution. Dans mon cas, le code ci-dessous m'aide beaucoup. J'espère que cela aide quelqu'un d'autre.
Vous pouvez comparer deux fichiers avec la syntaxe suivante sur votre terminal préféré:
la source
Si vous conservez vos fichiers dans Git, vous pouvez faire des différences entre les versions avec le script diff-highlight , qui affichera différentes lignes, avec les différences mises en évidence.
Malheureusement, cela ne fonctionne que lorsque le nombre de lignes supprimées correspond au nombre de lignes ajoutées - il existe un code de remplacement pour les lignes ne correspondant pas, donc vraisemblablement cela pourrait être corrigé à l'avenir.
la source
Ce n'est pas une réponse complète, mais si
cmp -l
le résultat n'est pas assez clair, vous pouvez utiliser:la source
La plupart de ces réponses mentionnent l'utilisation de diff-highlight , un module Perl. Mais je ne voulais pas savoir comment installer un module Perl. J'y ai donc apporté quelques modifications mineures pour en faire un script Perl autonome.
Vous pouvez l'installer en utilisant:
Et l'utilisation (si vous avez l'Ubuntu
colordiff
mentionné dans la réponse de zhanxw):Et l'utilisation (si vous ne le faites pas):
la source