Diff est un excellent outil pour afficher les changements entre deux fichiers. Mais comment afficher les similitudes de deux fichiers texte (tout en ignorant les différences)?
Exemple d'entrée d'entrée:
a:
Foo Bar
X
Hello
World
42
b:
Foo Baz
Hello
World
23
Pseudo sortie (quelque chose comme ça):
@@ 2,3
=Hello World
Il ne suffit pas de trier les deux fichiers et d'utiliser la communication, car dans ce cas, les informations de ligne sont perdues.
command-line
shell
diff
maxschlepzig
la source
la source
...%df'$'\n''%<'...
... --unchanged-group-format="@@ %dn,%df%c'\012'%<" ...
(Notez les guillemets doubles.)which diff
pour voir si c'est votre problème.-F
signifie correspondre à des chaînes simples (pas à des expressions rationnelles),-x
signifie uniquement des correspondances sur toute la ligne,-f
signifie prendre des «modèles» (c'est-à-dire des lignes) du fichier nommé comme argumentla source
-f
et-F
échangé ?. Au moins dans magrep
version est comme ça. Je dois fournir unefile2
entrée à l'-f
argument, commecat file1 | grep -Fxf file2
, puis fonctionne.comm
peut être utilisé.man comm
pour toutes les options, mais vous voudrez utilisercomm -12 ...
pour afficher uniquement les lignes qui existent dans les deux entrées.Comme les gens l'ont souligné, vous devez d'abord transmettre vos commentaires
sort
.la source
Je ne pense pas qu'il existe une seule commande qui fasse ce que vous voulez qu'elle fasse. Vous pouvez cependant essayer de combiner la sortie de
diff
avecgrep
. Si vos fichiers texte contiennent aucun des caractères|
,<
,>
, ce qui suit vous donne une sortie un peu utile:la source
diff --width=155 --left-column --side-by-side a b | grep -n -v '|' | sed 's/ *($//'
Dick Grune a écrit une famille d'outils pour ce genre de chose:
http://dickgrune.com/Programs/similarity_tester/
Il existe des versions qui analysent la syntaxe de divers langages, de sorte que des choses comme les variables renommées peuvent être considérées comme inchangées.
Il est empaqueté comme
similarity-tester
dans Debian et Ubuntu.la source