
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 spaz
en el ejemplo anterior ha tomado el lugar de bar
en 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 -w
comando 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 tr
comando? Aquí están lospáginas de manual. Está incluido con msysgit
, cygwin
y gnuwin32 tools
hasta 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 diff
y hacer que funcione sin espacios en blanco.
Por ejemplo, tengo un archivo llamado HelloWorldApp.java
. Déjame mostrarte cómo tr
se 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... :-)