J'ai deux fichiers qui me semblent identiques (y compris les espaces de fin et les nouvelles lignes) mais diff dit toujours qu'ils diffèrent. Même quand je fais un diff -y
comparaison côte à côte les lignes se ressemblent exactement. La sortie de diff est l'ensemble des 2 fichiers.
Une idée de la cause?
Odd .. pouvez-vous essayer cmp
? Vous voudrez peut-être utiliser le '-b
'aussi.
page de manuel cmp - Compare deux fichiers octet par octet.
C'est l'une des bonnes choses à propos d'Unix/Linux .. tant d'outils :)
Essayer:
diff file1 file2 | cat -t
Le -t
l'option fera que cat
affichera clairement tous les caractères spéciaux - par exemple. ^M
pour CR, ^I
pour l'onglet.
Depuis la page de manuel (OS X):
-t Display non-printing characters (see the -v option), and display tab characters as `^I'. -v Display non-printing characters so they are visible. Control characters print as `^X' for control-X; the delete character (octal 0177) prints as `^?'. Non-ASCII characters (with the high bit set) are printed as `M-' (for meta) followed by the character for the low 7 bits.
Les différences peuvent-elles être causées par des fins de ligne DOS ou UNIX, ou quelque chose de similaire?
Et si vous hexdump
eux? Cela pourrait montrer des différences plus évidentes, par exemple:
hexdump -C file1 > file1.hex
hexdump -C file2 > file2.hex
diff file1.hex file2.hex
Ma première supposition, qui s'avère être confirmée, est que les fichiers utilisent des fins de ligne différentes. Il pourrait y avoir une autre différence dans les espaces, comme la présence d'espaces en fin (mais vous n'obtiendrez généralement pas cela sur plusieurs lignes) ou une indentation différente (tabulations vs espaces). Utilisez une commande qui imprime des espaces et contrôle les caractères sous une forme visible, telle que
diff <(cat -A file1) <(cat -A file2)
diff <(sed -n l file1) <(sed -n l file2)
Vous pouvez confirmer que les différences ne concernent que les fins de ligne en les normalisant d'abord. Vous pouvez avoir un dos2unix
utilitaire; sinon, supprimez explicitement le caractère CR (^ M,\r,\015) supplémentaire:
diff <(tr -d '\r' <file1) <(tr -d '\r' <file2)
ou si file1
est celui avec des terminaisons DOS
tr -d '\r' <file1 | diff - file2