Diferencia, muestra la línea modificada solo del archivo correcto


24

Tengo un archivo ay bme gustaría generar líneas de bese cambio desde que fue clonado a. Solo las líneas modificadas, sin contexto circundante, sin marcas de desplazamiento de diferencia.

¿Cómo puedo hacer eso usando scripts de shell? (Sin Python / Perl / PHP / ...)

Sed y awk son soluciones aceptables.

Por ahora, lo que estoy haciendo es dif -y con --suppress-common-lines y sed usando regex backreferences para buscar la parte correcta después del espacio en blanco. ¿Tiene que haber una mejor manera?

Usando perl (que está prohibido), haría algo como esto:

diff -y --suppress-common-lines -W $COLUMNS Eclipse_Preferences_Export_*.epf | perl -pe 's/.*\t|\t(.*)$/\1/g'

Respuestas:


34

Con los paquetes de GNU diffutils , diffesto solo generará líneas del archivo b que se modificaron o se insertaron recientemente:

diff --unchanged-line-format= --old-line-format= --new-line-format='%L' a b

44
Increíble. La vergüenza la información está enterrado en el Texinfo y ningún indicio se proporciona en la página del manual que estaba leyendo ..
Robottinosino

6

Tienes que agregar una opción más:

grep -vf file1 file2

Si bien esto no requiere que se ordenen las líneas, creo que grep usa mucha más memoria y se bloqueará para archivos grandes.
Sridhar Sarnobat

tampoco funciona si las líneas están duplicadas
Jayen

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.