Quiero comparar líneas en dos archivos, pero para minimizar el ruido en la salida, solo quiero que se impriman las diferencias reales en las líneas.
Por ejemplo, dados los dos archivos a continuación:
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 la salida sea algo como:
[-b-]{+B+}
Actualmente, el mejor enfoque que encontré fue usar git diff --word-diff
, pero genera toda la línea:
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
¿Hay una forma más directa de hacerlo, que no sea 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.
shell-script
diff
anol
fuente
fuente
b
yB
es obvio? Entiendo que esta fue probablemente la diferencia real, pero a los fines de la pregunta puede facilitarla.Respuestas:
Usando wdiff :
La opción
-3
o---no-common
eliminará las palabras que son comunes entre los dos archivos y solo mostrarán las diferencias.El
===...
banner (y las líneas vacías) se pueden eliminar congrep
:wdiff
también puede leerdiff
datos unificados si le da la opción-d
o--diff-input
, por ejemplo, degit
:Aunque
wdiff
no es una herramienta POSIX, está comúnmente disponible.fuente
alias wdiff="wdiff -n -w $'\033[30;41m' -x $'\033[0m' -y $'\033[30;42m' -z $'\033[0m'"
(tomado de aquí ).