Diff es una gran herramienta para mostrar los cambios entre dos archivos. Pero, ¿cómo mostrar las similitudes de dos archivos de texto (sin tener en cuenta las diferencias)?
Es decir, entrada de muestra:
a:
Foo Bar
X
Hello
World
42
b:
Foo Baz
Hello
World
23
Pseudo salida (algo como esto):
@@ 2,3
=Hello World
Simplemente ordenar ambos archivos y usar comm no es suficiente, porque en ese caso se pierde la información de la línea.
command-line
shell
diff
maxschlepzig
fuente
fuente

...%df'$'\n''%<'...... --unchanged-group-format="@@ %dn,%df%c'\012'%<" ...(Tenga en cuenta las comillas dobles.)which diffpara ver si este es su problema.-Fsignifica emparejar cadenas simples (no expresiones regulares),-xsignifica solo coincidencias de línea completa,-fsignifica tomar 'patrones' (es decir, líneas) del archivo nombrado como argumentofuente
-fe-Fintercambiados ?. Al menos en migrepversión es así. Necesito proporcionarfile2información al-fargumento, comocat file1 | grep -Fxf file2, y luego funciona.commpuede ser usado.man commpara todas las opciones, pero querrá usarcomm -12 ...para mostrar solo las líneas que existen en ambas entradas.Como la gente ha señalado,
sortprimero debe pasar su opinión .fuente
No creo que haya un solo comando que haga lo que quieres que haga. Sin embargo, puede intentar combinar la salida de
diffcongrep. Si sus archivos de texto contienen ninguno de los personajes|,<,>, el siguiente le da salida de cierta utilidad:fuente
diff --width=155 --left-column --side-by-side a b | grep -n -v '|' | sed 's/ *($//'Dick Grune escribió una familia de herramientas para este tipo de cosas:
http://dickgrune.com/Programs/similarity_tester/
Hay versiones que analizan la sintaxis de varios idiomas, de modo que cosas como las variables renombradas pueden verse sin cambios.
Está empaquetado como
similarity-testeren Debian y Ubuntu.fuente