Tengo dos archivos que cuando comparo con diff muestran que cada línea ha cambiado. Cuando los comparo con diff -w
(ignorando espacios en blanco) muestra los pocos cambios mínimos que espero.
Obviamente hay alguna diferencia entre los espacios en blanco en cada archivo, pero no sé qué son ni cómo encontrarlos. Intenté editar los archivos para asegurarme de que el espacio en blanco sea en realidad caracteres de espacio (en lugar de pestañas), pero no estoy seguro de qué más hacer.
He usado vim con :set list on
para confirmar que no había espacio final al final de las líneas.
También creo que cada archivo tiene terminadores de línea de Linux ya que vim no mostró ^M
el final de las líneas.
linux
diff
whitespace
Romski
fuente
fuente
diff
pero muchos editores, de manera predeterminada, no lo hacen visible.vim
usuario, ¿ha intentado usarvimdiff file1 file2
para ver cuáles son las diferencias?Respuestas:
Para los
vim
usuarios, hay una práctica utilidad para mostrar diferencias exactas entre archivos:Esto pondrá cada archivo en ventanas, uno al lado del otro, y las diferencias se resaltarán en color.
Algunos comandos útiles cuando en
vimdiff
Mientras que en
vimdiff
, algunos comandos útiles son:]c
: salta al siguiente cambio[c
: saltar al cambio anteriorctrl-W ctrl-W
: cambiar a otra ventanazo
: pliegues abiertoszc
: cerrar plieguesEjemplo
Aquí es un ejemplo de
vimdiff
en unxterm
comparan dos versiones de uncups
fichero de configuración:Puede ver que secciones largas de líneas idénticas se han colapsado. Se pueden abrir de nuevo con
zo
.El esquema de color variará dependiendo de la configuración de su opción. En el ejemplo anterior, cuando aparece una línea en un archivo pero no en el otro, a esa línea se le asigna un fondo azul oscuro. En el otro archivo, las líneas que faltan se indican con líneas discontinuas. Cuando aparece una línea en ambos archivos pero tiene algunas diferencias, las partes sin cambios de las líneas tienen un fondo rosado y las partes cambiadas tienen un fondo rojo.
fuente
En FreeBSD o en la mayoría de los sistemas Linux, puede canalizar la salida de diff
cat -v -e -t
para mostrar las diferencias de espacios en blanco.Las pestañas se mostrarán como
^I
,$
se mostrará un al final de cada línea para que pueda ver los espacios en blanco al final, y los caracteres no imprimibles se mostrarán como^X
oM-X
.Si tiene coreutils de GNU (disponible en la mayoría de las distribuciones de Linux que no están ocupadas), esto se puede simplificar a
En sistemas busybox, use
catv -vet
.fuente
¿Se editó uno de los archivos en una máquina con Windows?
La terminación de línea estándar en Windows es CRLF, donde en Linux es simplemente LF (y en Mac solía ser CR, pero sospecho que ha cambiado desde OS X).
Pruebe
wc -l
los archivos y vea cuántas líneas, luego vea si la diferencia de tamaño es la misma que la cantidad de líneas (la última línea no puede terminar en un archivo).fuente
od
puede ayudar. El comando Volcado octal puede mostrar contenido en hexadecimal. Esto puede ayudarlo a ver qué bytes, incluidos los bytes nulos o los espacios en blanco inesperados, hay en un archivo. Las posibles causas comunes pueden ser LF vs CRLF, tabulaciones vs espacios, o ASCII vs Unicode (que a menudo puede tener un byte nulo antes de cada byte normalmente visible).od -x filename
debería revelar cualquiera de esos patrones. Si desea una forma más elaborada de ver el archivo, cualquier "editor hexadecimal" puede funcionar bien. Lo bueno de estood
es que, al igual que elcut
comando, está integrado en muchos sistemas Unix. Entonces, a menudo, no es necesaria una instalación separada.Si necesita que los archivos sean más similares,
tr
puede hacer algunos cambios ysed
puede hacer más. Probablemente comenzaríals -l
por ver qué archivo es más grande, luego veré los bytes para ver qué se debe cambiar y luego cambiaré uno de los archivos para que parezcan más similares.fuente
Para averiguar dónde están los espacios en blanco y las pestañas reales, puede reemplazarlos usando,
sed
por ejemplo:Y ahora compara los dos archivos.
fuente
cat
, como en superuser.com/a/913368/37154El siguiente contenido se copió aquí de la sección de "preguntas" anterior, escrita por Romski.
Ambos
vimdiff
ydiff file1 file2 | cat -A
fueron muy útiles desde una perspectiva de herramientas.Por último, encontré otro problema. Algunos de mis archivos fueron codificados con UTF-8 BOM. Esto fue resaltado usando
diff file1 file2 | cat -A
. Esto se manifestó comoM-oM-;M-?
al comienzo del archivo afectado:Si bien hubo una serie de problemas, he enumerado un par de comandos a continuación para aquellos que necesitan limpiar sus archivos:
fuente