Diferencia para ignorar por completo los espacios en blanco

Diferencia para ignorar por completo los espacios en blanco

Estoy buscando una aplicación que diferencie dos archivos y, de hecho, ignore todos los espacios en blanco, por ejemplo:

class foo { 
  bar
  spaz 
}

es igualmente equivalente a

class foo{bar spaz}

o, también

classfoo { 
  barspaz}

pero no

classfoo { 
  spazspaz
}

es decir, me mostraría que spazen el ejemplo anterior ha tomado el lugar de baren cualquiera de los otros ejemplos. Sólo necesita comparar 2 archivos.

  • Puede ser una utilidad compatible con Windows o Linux/Unix/posix.
  • Probé el diff -wcomando lin/unix, solo ignora los espacios en blanco si la diferenciapor líneaes espacio en blanco. No veo una opción paratotalmenteignorar los espacios en blanco.
  • También probé UECompare o Ultracompare, una utilidad de comparación no gratuita para Windows.

Respuesta1

¿Estás buscando algo como el trcomando? Aquí están lospáginas de manual. Está incluido con msysgit, cygwiny gnuwin32 toolshasta donde yo sé.

Entonces puedes eliminar todos los espacios en blanco antes de realizar la diferenciación haciendo algo como:

tr --delete '[:space:]' <filename.txt

Luego puede enviar la salida de ese comando diffy hacer que funcione sin espacios en blanco.

Por ejemplo, tengo un archivo llamado HelloWorldApp.java. Déjame mostrarte cómo trse procesa:

C:\temp>cat HelloWorldApp.java
class HelloWorldApp {
    public static void main(String[] args) {
        System.out.println("Hello World!"); // Display the string.
    }
}
C:\temp>tr -d '[:space:]' <HelloWorldApp.java
classHelloWorldApp{publicstaticvoidmain(String[]args){System.out.println("HelloWorld!");//Displaythestring.}}

Respuesta2

A pesar de estar orientado a líneas, diffpodríaestar obligado a hacer lo que se solicita. Aproximadamente, podría hacer diff -w y luego postprocesar la salida de diff. Podría mirar la salida de diferencias y unir varios pares de líneas para ver si (ahora) coinciden con la línea del otro archivo.

Parece que podría ser O(n^2) u otra cosa desagradable, pero aun así sería muy útil si se limitara a (decir) no unirse, unir 2 líneas, unir 3 líneas en el archivo 1 X no unirse, unirse 2 líneas, une 3 líneas en el archivo 2 en una "ventana" móvil de la salida de diferencias. (donde X es ~ "producto cruzado")

De hecho, parece un trabajo que un script de posprocesamiento de salida de diferencias de Perl podría hacer con unas pocas horas de trabajo (dependiendo de sus habilidades de programación (Perl))

Quizás cuando tengo alguna tarea que realmente no quiero hacer en el trabajo... :-)

información relacionada