Je voudrais que (GNU) DIFF imprime uniquement les lignes qui sont différentes dans un fichier. Donc donné
==> diffa.txt <==
line1
line2 - in a only
line3
line4 changed
line5
==> diffb.txt <==
line1
line3
line4 changed in b
line5
line6 in b only
je voudrais diff --someoption diffa.txt diffb.txt
produire
line2 - in a only
line4 changed
Ce qui suit devrait être utile, mais c'est un peu cryptique:
--GTYPE-group-format=GFMT
Similar, but format GTYPE input groups with GFMT.
--line-format=LFMT
Similar, but format all input lines with LFMT.
--LTYPE-line-format=LFMT
Similar, but format LTYPE input lines with LFMT.
LTYPE is `old', `new', or `unchanged'.
GTYPE is LTYPE or `changed'.
GFMT may contain:
%< lines from FILE1
%> lines from FILE2
Réponses:
Je ne suis pas sûr que
diff
seul puisse le faire, mais vous pouvez toujours utiliser la puissance d'autres utilitaires GNU pour vous aider.Il fait la différence, puis ne sélectionne que les lignes qui commencent par «-» - celles-ci sont modifiées et ont des valeurs du fichier diffa.txt, puis
sed
supprimez simplement les signes «-».Modifier: après quelques expériences avec
diff
, la commande ci-dessous donne ce que vous voulez:la source
--changed-group-format='%<'
fais maintenant ...La méthode la plus simple consiste à utiliser l'
comm
utilitaire linux (il a besoin d'un fichier trié pour l'entrée). Il écrit sur la sortie standard:lignes uniques pour diffa.txt
lignes uniques pour diffb.txt
lignes communes
et vous pouvez supprimer chacun d'eux par le paramètre 1,2 ou 3 en conséquence. Donc, dans votre cas, cela ressemblera à ceci:
comm -23 diffa.txt diffb.txt
Il supprime les lignes qui sont uniques pour diffb.txt, les lignes qui sont communes et imprime les lignes qui sont uniques uniquement pour diffa.txt
Source: https://www.tutorialspoint.com/unix_commands/comm.htm
la source
diff
qui ne fait pas ce que j'attends. Et je crois qu'il est préinstallé à la fois sur BSD (c'est-à-dire Mac OS X) ainsi que sur Ubuntu donc pas de cauchemars de gestionnaire de paquets.Je voudrais mentionner que
comm
s'attend à des fichiers d'entrée triés et rapporte donc des résultats différents dediff
.est universel. Bravo à @vava
la source