diff
y luego grep
para el tipo de edición que desee.
diff -u A1 A2 | grep -E "^\+"
Un enfoque similar a https://stackoverflow.com/a/15385080/337172 pero, con suerte, más comprensible y fácil de modificar:
diff \
--new-line-format="%L" \
--old-line-format="" \
--unchanged-line-format="" \
A1 A2
La mayor parte de lo siguiente se copia directamente de la respuesta de falla del servidor de @TomOnTime aquí. En la parte inferior hay un intento que funciona en archivos sin ordenar, pero el comando ordena los archivos antes de dar la diferencia, por lo que en muchos casos no será lo que se desea. Para diferencias bien formateadas de archivos sin clasificar, puede encontrar las otras respuestas más útiles (gracias a @Fritz por señalar esto):
Mostrar líneas que solo existen en el archivo a:(es decir, lo que se eliminó de a)
comm -23 a b
Mostrar líneas que solo existen en el archivo b:(es decir, lo que se agregó a b)
comm -13 a b
Mostrar líneas que solo existen en un archivo o en el otro:(pero no en ambos)
comm -3 a b | sed 's/^\t//'
(Advertencia:si el archivo a
tiene líneas que comienzan con TAB, (la primera TAB) se eliminará de la salida).
NOTA:Ambos archivos deben ordenarse para que "comm" funcione correctamente. Si aún no están ordenados, debe ordenarlos:
sort <a >a.sorted
sort <b >b.sorted
comm -12 a.sorted b.sorted
Si los archivos son extremadamente largos, esto puede ser una gran carga, ya que requiere una copia adicional y, por lo tanto, el doble de espacio en disco.
Editar:tenga en cuenta que el comando se puede escribir de manera más concisa utilizando la sustitución de procesos (gracias a @phk por el comentario):
comm -12 <(sort < a) <(sort < b)
Puedes probar esto
diff --changed-group-format='%>' --unchanged-group-format='' A1 A2
Las opciones están documentadas en man diff
:
--GTYPE-group-format=GFMT
format GTYPE input groups with GFMT
y:
LTYPE is 'old', 'new', or 'unchanged'.
GTYPE is LTYPE or 'changed'.
y:
GFMT (only) may contain:
%< lines from FILE1
%> lines from FILE2
[...]