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 onpara 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ó ^Mel final de las líneas.
linux
diff
whitespace
Romski
fuente
fuente

diffpero muchos editores, de manera predeterminada, no lo hacen visible.vimusuario, ¿ha intentado usarvimdiff file1 file2para ver cuáles son las diferencias?Respuestas:
Para los
vimusuarios, 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
vimdiffMientras 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
vimdiffen unxtermcomparan dos versiones de uncupsfichero 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 -tpara 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^XoM-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 -llos 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
odpuede 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 filenamedeberí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 estoodes que, al igual que elcutcomando, 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,
trpuede hacer algunos cambios ysedpuede hacer más. Probablemente comenzaríals -lpor 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,
sedpor 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
vimdiffydiff file1 file2 | cat -Afueron 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