Je trouve cette forme particulière souvent utile :
diff --changed-group-format='-%<+%>' --unchanged-group-format='' f g
Exemple :
printf 'a\nb\nc\nd\ne\nf\ng\n' > f
printf 'a\nB\nC\nd\nE\nF\ng\n' > g
diff --old-line-format=$'-%l\n' \
--new-line-format=$'+%l\n' \
--unchanged-line-format='' \
f g
Sortie :
-b
-c
+B
+C
-e
-f
+E
+F
Il montre donc les anciennes lignes avec -
suivi immédiatement de la nouvelle ligne correspondante avec +
.
Si nous avions une suppression de C
:
printf 'a\nb\nd\ne\nf\ng\n' > f
printf 'a\nB\nC\nd\nE\nF\ng\n' > g
diff --old-line-format=$'-%l\n' \
--new-line-format=$'+%l\n' \
--unchanged-line-format='' \
f g
ça ressemble à ça :
-b
+B
+C
-e
-f
+E
+F
Le format est documenté à l'adresse suivante man diff
:
--line-format=LFMT
format all input lines with LFMT`
et :
LTYPE is 'old', 'new', or 'unchanged'.
GTYPE is LTYPE or 'changed'.
et :
LFMT (only) may contain:
%L contents of line
%l contents of line, excluding any trailing newline
[...]
Question connexe : https://stackoverflow.com/questions/15384818/how-to-get-the-difference-only-additions-between-two-files-in-linux
Testé dans Ubuntu 18.04.
2 votes
Vous devez mieux définir ce que vous entendez par ajout et suppression. Plus précisément, une ligne peut-elle changer ? Si oui, comment voulez-vous qu'une ligne modifiée soit traitée ? Si vous effectuez une vérification strictement axée sur les lignes, une ligne qui change est identique à l'ancienne ligne qui est supprimée et à la nouvelle ligne qui est ajoutée. Par exemple, comment doit-il traiter une ligne qui est divisée en deux ? Comme deux 1 ligne changée ? 2 lignes modifiées ? 1 ligne supprimée et 2 lignes ajoutées ? A moins que vous puissiez garantir que les lignes ne changeront jamais, qu'elles seront juste ajoutées et supprimées, je pense que c'est voué à l'échec sans de meilleures définitions.
2 votes
Je trouve la question assez peu claire. Mais au moins une interprétation de la question pourrait être répondue par
diff A B | grep '^[<>]'
0 votes
Vous recherchez peut-être
comm
.0 votes
@ChristopherCashell, Il veut dire ignorer l'ordre de tri ; un problème typiquement commun. Habituellement, cela se fait en triant d'abord les segments (lignes) de chaque côté avant de faire un diff typique.
0 votes
@Pacerier, Tu es sûr de ça ? Ou est-ce que vous devinez ? Rien sur le tri ou l'ordre de recherche n'est mentionné ou suggéré dans la question. En l'état, la question n'est pas claire et peut être interprétée de différentes manières. Sans savoir pour sûr ce qu'il demande, nous faisons des hypothèses et proposons des solutions qui peuvent ou non résoudre le problème réel. De plus, le commentaire du posteur original sur une des réponses suggère que c'est nicht liés au tri. Il s'agit de la signification de "ajouté et supprimé" par rapport à "modifié".