J'utilise Git Difff, qui produit une sortie colorée. Cependant, je trouve maintenant que je dois utiliser Diff ordinaire pour quelque chose, et il produit beaucoup de production difficile à lire en raison du manque de couleurs. Comment faire diffuser une sortie de couleur lisible et colorée? Idéalement, tout en les tuyant moins, pour un examen facile des grands fichiers.
diff
ne peut pas sortir des couleurs, vous avez besoin d'un autre programme, tel que colordiff
pour cela. Les couleurs de la borne sont imprimées via codes d'évacuation ANSI qui moins n'interprètent pas par défaut. Pour obtenir less
pour montrer correctement les couleurs, vous avez besoin de -r
, voire mieux, -R
changer:
colordiff -- "$file1" "$file2" | less -R
De man less
:
-R or --RAW-CONTROL-CHARS
Like -r, but only ANSI "color" escape sequences are
output in "raw" form. Unlike -r, the screen appearance
is maintained correctly in most cases. ANSI "color"
escape sequences are sequences of the form:
ESC [ ... m
where the "..." is zero or more color specification
characters For the purpose of keeping track of screen
appearance, ANSI color escape sequences are assumed to
not move the cursor. You can make less think that
characters other than "m" can end ANSI color escape
sequences by setting the environment variable LESSAN‐
SIENDCHARS to the list of characters which can end a
color escape sequence. And you can make less think
that characters other than the standard ones may appear
between the ESC and the m by setting the environment
variable LESSANSIMIDCHARS to the list of characters
which can appear.
Sinon, vous pouvez utiliser more
qui affichera les couleurs correctement par défaut.
Si vous ne pouvez pas installer de programmes externes, vous devriez pouvoir obtenir la même sortie en utilisant une approche plus manuelle:
diff a b |
Perl -lpe 'if(/^</){$_ = "\e[1;31m$_\e[0m"}
elsif(/^>/){$_ = "\e[1;34m$_\e[0m"}'
Les autres réponses ici pourraient être obsolètes. AS de CareTils 3.5 diff
peut en effet produire une sortie colorée qui est désactivée par défaut lorsque le stdout n'est pas une console.
De la page man:
--color[=WHEN]
[.____] Coloriser la sortie;WHEN
peut êtrenever
,always
ouauto
(la valeur par défaut)
Forcer la sortie de couleur lorsque STDOUT est un tuyau diff --color=always -- "$file1" "$file2" | less -R
devrait marcher.
Au tuyau de couleur diff to moins:
diff $file1 $file2 | colordiff | less -r
Pour le rendre plus lisible, en le limitant à un seul écran:
diff -uw $file1 $file2 | colordiff | less -r
Et, pour causer moins de ne pas afficher s'il n'y a qu'un seul écrin de contenu:
diff -uw $file1 $file2 | tee /dev/stderr | colordiff | less -r -F
Le -f provoque moins de fermer immédiatement s'il y a moins d'un visuel de contenu, le tuyau à starr est dû au fait que lorsque moins vous perdez la sortie - par la tuyauterie à StDerr, il reçoit une sortie même si elle ne s'affiche pas.
Une solution alternative (et, je pense, meilleure), est d'utiliser -x pour empêcher moins d'élimination de l'écran:
diff -uw $file1 $file2 | colordiff | less -r -X -F
Cela fonctionne bien pour moi, mais pourrait être spécifique à Bash. Colordiff n'est pas un intégré, mais est facilement installé.