Früher habe ich Examdiff unter Windows verwendet, was großartig ist, da es Unterschiede in Bezug auf den Dateityp zeigt, z. B. beim Vergleich von JSOON oder beim Sortieren von INI-Dateien vor dem Vergleich.
Unter Linux habe ich ein unvergleichliches gefunden, das alles kann, was Examdiff tut, aber nicht so einfach wie Examdiff, außerdem ist es nicht Open Source. Also brauche ich ein GUI- diff
Programm, das:
UPDATE: Um zu erklären, was ich mit Plugins meine, werde ich zwei Beispiele geben
Zuerst werde ich die folgenden Dateien vergleichen:
1.json :
{
"name": "test app",
"version": "0.1",
"release_date": "2_2_2002",
"kernel": "4.14",
"username": "root",
"password": "1234",
}
2.json
{"name": "test app","version": "0.1","release_date": "2_2_2002","kernel": "4.14","username": "root","password": "1234",}
Sie können sehen, dass diese JSON-Dateien inhaltlich identisch sind, außer dass die erste richtig eingerückt (verschönert) ist, während die zweite verkleinert ist.
Wenn ich also ein Vergleichstool für diese Dateien ausführe, würde ich viele Unterschiede feststellen.
Laufen meld
:
Wenn ich Examdiff für diese Dateien ausführe, erkennt es, dass es sich um JSON-Dateien handelt, verwendet also ein Plugin und übergibt diese Dateien an ein kleines Dienstprogramm , das diese Dateien vor dem Vergleich verschönert (All dies geschieht natürlich unter der Haube). Also nach dem Vergleich zeigt, dass die Dateien identisch sind
Das zweite Beispiel sind INI-Dateien:
1.ini
[info]
ShortName=EN
[main]
var1=Yes
var2=No
var3=Abort
var4=Ignore
var5=OK
var6=Cancel
var7=Retry
var8=All
var9=Help
2.ini
[main]
var1=Yes
var6=Cancel
var5=OK
var9=Help
var2=No
var3=Abort
var4=Ignore
var7=Retry
var8=All
[info]
ShortName=EN
In INI-Dateien spielt die Reihenfolge der Schlüssel=Wert -Paare keine Rolle, solange sie in denselben Abschnitten stehen, und leere Zeilen spielen auch keine Rolle
Also zeigt das Laufen wieder meld
viele Unterschiede:
beim Ausführen von Examdiff zeigt, dass sie identisch sind (diesmal wird ein anderes Plugin verwendet, das auf einem Dienstprogramm namens INIsorter basiert).
Nicht wirklich eine Antwort, aber in der Zwischenzeit können einige Filter mit bash
Prozesssubstitution und verschiedenen Utilities simuliert werden:
Verwenden Sie für .json- Dateien mlr
und jq
:
meld <(mlr --json cat 1.json | jq -M '.' ) \
<(mlr --json cat 2.json | jq -M '.' )
Verwenden Sie für .ini- Dateien Folgendes crudini
:
meld <(crudini --get --format=lines 1.ini|sort) \
<(crudini --get --format=lines 2.ini|sort)
Ein Fehler solcher Methoden besteht darin, dass die Dateinamen ( 1.json usw. ) meld
nicht angezeigt werden, sondern die Prozessersatzgerätenummern , aus denen man den entsprechenden Dateinamen ableiten muss .
agc
jq
dies allein ausreichen würde ( dhjq -M 1.json
), aber ohnemlr
gibt es den Fehler " parse error: Expected another key-value pair at line 8, column 1 " zurück.