¿Cómo get la diferencia de nivel de caracteres usando el command "diff" en Linux usando el script de shell?

Tengo dos files SQL, uno es old.sql y el otro es new.sql .

Supongamos que old.sql contiene una tabla con tres campos, Emp_Id, Nombre y Dirección y datos almacenados en old.sql de la siguiente manera:

 Insert into table1 values (101 ,"a", "xyz"); Insert into table1 values (102 ,"b", "pqr"); 

Luego cambié "a" la dirección "xyz" a "xyz123" y guardé esa información en el file new.sql . Ahora el file new.sql contiene datos de la siguiente manera:

 Insert into table1 values (101 ,"a", "xyz123"); Insert into table1 values (102 ,"b", "pqr"); 

Cuando utilizo el command diff esta manera:

 diff old.sql new.sql 

da diferencias en línea pero solo quiero datos actualizados, como xyz123.

Puede encontrar wdiff útil para este tipo de comparación; es un front-end para diff que produce comparaciones palabra por palabra. Con su ejemplo, produce por defecto

 Insert into table1 values (101 ,"a", [-"xyz");-] {+"xyz123");+} Insert into table1 values (102 ,"b", "pqr"); 

Puede usar características del terminal para hacer que la salida sea más legible en un terminal ( wdiff -t ). También tiene una opción de -3 que limita la salida a palabras modificadas solamente:

 ====================================================================== [-"xyz");-] {+"xyz123");+} ====================================================================== 

Por definición, diff muestra líneas de diferencias por líneas (ver página de manual de diff), por lo tanto, no mostrará solo los caracteres diferentes. Puede networkingucir la cantidad de diferencia procesando previamente los files, por ejemplo, insertando un carácter de fin de línea después de cada semicolumna:

 sed -e 's/;/;\'$'\n/g' old.sql > old.patched 

Luego use diff en los dos files resultantes.

Puedes usar:

 diff -u old.sql new.sql |colordiff |diff-highlight 

captura de pantalla

colordiff es un package de Ubuntu. Puede instalarlo usando sudo apt-get install colordiff .

diff-hight es de git (desde la versión 2.9). Se encuentra en /usr/share/doc/git/contrib/diff-highlight/diff-highlight . Puedes ponerlo en algún lugar de tu $PATH . O consíguelo del proyecto diff-so-fancy .