diff mostrando solo diferencias dentro de la línea

diff mostrando solo diferencias dentro de la línea

Quiero comparar líneas en dos archivos, pero para minimizar el ruido en la salida, quiero que solo se impriman las diferencias reales en las líneas.

Por ejemplo, dados los dos archivos siguientes:

a.txt

a b c d e f g h i j k l m n o p q r s t u v w x y z

b.txt

a B c d e f g h i j k l m n o p q r s t u v w x y z

(la diferencia entre ellos es el caso de la letra b)

Quiero que el resultado sea algo como:

[-b-]{+B+}

Actualmente, el mejor enfoque que encontré fue usar git diff --word-diff, pero genera la línea completa:

a [-b-]{+B+} c d e f g h i j k l m n o p q r s t u v w x y z

¿Existe una forma más directa de hacerlo, además de analizar manualmente la salida? Además, idealmente preferiría usar algo más comúnmente disponible que git diff, por ejemplo, una herramienta de shell POSIX que no requiera que el usuario instale paquetes adicionales.

Respuesta1

Usandowdiff:

$ wdiff -3 a.txt b.txt

======================================================================
 [-b-] {+B+}
======================================================================

La opción -3o ---no-commoneliminará las palabras que son comunes entre los dos archivos y solo mostrará las diferencias.

El ===...banner (y las líneas vacías) se pueden eliminar con grep:

$ wdiff -3 a.txt b.txt | grep -vx '=*'
 [-b-] {+B+}

wdiffTambién puede leer diffdatos unificados si le da la opción -do --diff-input, por ejemplo desde git:

git diff somefile | wdiff -d -3

Aunque wdiffno es una herramienta POSIX, está comúnmente disponible.

información relacionada