Раньше я использовал Examdiff в Windows, и это здорово, потому что он показывает разницу по типу файла, например, сравнивает JSOON или сортирует файлы INI перед сравнением.
В Linux я нашел вне всякого сравнения, который делает все то же, что и Examdiff, но не так просто, как Examdiff, и это не открытый исходный код. Поэтому мне нужна программа с графическим интерфейсом diff
, которая:
ОБНОВЛЕНИЕ: Чтобы объяснить, что я имею в виду под плагинами, я приведу два примера .
Сначала я сравню следующие файлы:
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",}
Вы можете видеть, что эти файлы JSON идентичны по содержанию, за исключением того, что первый имеет правильный отступ (украшен), а второй минимизирован.
Поэтому, если я запущу любой инструмент сравнения этих файлов, я получу много различий.
Бег meld
:
в то время как если я запускаю Examdiff для этих файлов, он обнаруживает, что это файлы JSON, поэтому он использует плагин и передает эти файлы небольшой утилите , которая украшает эти файлы перед сравнением (все это делается, конечно, под капотом). Итак, после сравнения показывает, что файлы идентичны
Второй пример — файлы INI:
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
В файлах INI порядок пар ключ=значение не имеет значения, если они находятся в одних и тех же разделах, и пустые строки также не имеют значения.
поэтому снова запуск meld
показывает много различий:
при запуске Examdiff показывает, что они идентичны (на этот раз он использует другой плагин, который опирается на утилиту под названием INIsorter)
На самом деле это не ответ, но тем временем некоторые фильтры можно смоделировать с помощью bash
замены процессов и различных утилит:
Для файлов .jsonmlr
с помощью и jq
:
meld <(mlr --json cat 1.json | jq -M '.' ) \
<(mlr --json cat 2.json | jq -M '.' )
Для файлов .inicrudini
с помощью :
meld <(crudini --get --format=lines 1.ini|sort) \
<(crudini --get --format=lines 2.ini|sort)
Одним из недостатков таких методов является то , что meld
они не отображают имена файлов ( 1.json и т. д. ), а отображают номера устройств подстановки процессов , из которых нужно вывести соответствующее имя файла.
агр
jq
одного этого было бы достаточно ( т.е.jq -M 1.json
), но безmlr
него возвращается ошибка «ошибка синтаксического анализа: ожидается другая пара ключ-значение в строке 8, столбце 1 ».