¿Imprime las líneas comunes (similitudes) de dos files de text (lo opuesto a diff)?

Diff es una gran herramienta para mostrar los cambios entre dos files. Pero, ¿cómo mostrar las similitudes de dos files de text (sin tener en count las diferencias)?

Es decir, input de muestra:

a: Foo Bar X Hello World 42 b: Foo Baz Hello World 23 

Pseudo salida (algo como esto):

 @@ 2,3 =Hello World 

Solo orderar ambos files y usar comm no es suficiente, porque en ese caso la información de la línea se pierde.

¿Qué hay de usar diff, a pesar de que no quieres un diff? Prueba esto:

 diff --unchanged-group-format='@@ %dn,%df %<' --old-group-format='' --new-group-format='' \ --changed-group-format='' a.txt b.txt 

Esto es lo que obtengo con sus datos de muestra:

 $ cat a.txt Foo Bar X Hello World 42 $ cat b.txt Foo Baz Hello World 23 $ diff --unchanged-group-format='@@ %dn,%df %<' --old-group-format='' --new-group-format='' \ --changed-group-format='' a.txt b.txt @@ 2,3 Hello World 

No creo que haya un solo command que haga lo que usted quiere que haga. Sin embargo, puedes intentar combinar la salida de diff con grep . Si sus files de text no contienen ninguno de los caracteres | , < , > , lo siguiente le da un resultado algo útil:

 $ diff --side-by-side ab | grep -n -v "[|<>]" 3:Hello Hello 4:World World 
 grep -Fxf file1 file2 

-F significa coincidir cadenas simples (no expresiones regulares), -x significa solo coincidencias de línea completa, -f significa tomar 'patrones' (es decir, líneas) del file nombrado como su argumento

comm puede ser utilizado. man comm para todas las opciones pero querrá usar comm -12 ... para mostrar solo las líneas que existen en ambas inputs.

Como han señalado las personas, primero debe pasar su input por sort .

Dick Grune escribió una familia de herramientas para este tipo de cosas:

http://dickgrune.com/Programs/similarity_tester/

Hay versiones que analizan la syntax de varios idiomas, de modo que cosas como variables renombradas se pueden ver como sin cambios.

Está empaquetado como similarity-tester en Debian y Ubuntu.