Сначала отсортируйте два файла, а затем разведите их. Нет никакого способа убедить diff, что линии a и b в любом случае взаимозаменяемы. Заказ крайне важен для сравнения.
Редактировать для комментария -
Такие инструменты, как diff, не понимают никакой семантики более высокого уровня, кроме просто упорядоченных строк. Вы можете попробовать написать инструмент, который преобразует ваши файлы в те концепции более высокого уровня, по одному на строку, которые, возможно, может затем обработать diff (против написания пользовательского diff, что является своего рода болью). Поскольку вы не можете отсортировать весь файл, возможно, вы сортируете те небольшие разделы, где «порядок не имеет значения», поэтому они также не будут иметь значения для различий.
Конечный файл не обязательно должен иметь правильный формат файла (то есть совместимый с исходным синтаксисом), достаточно просто, чтобы передать, чтобы использовать различия, которые вы ищете, и в то же время захватывать семантику, которую вы использовали после, и при этом эффективно использовать готовый инструмент типа diff.
Пример:
Файл 1:
block thing {
a
b
}
block thing 2 {
c
d
}
Файл 2:
block thing {
b
c
a
}
block thing 3 {
f
e
}
"отсортированный" файл 1:
block thing {
a
b
}
block thing 2 {
c
d
}
"отсортированный" файл 2:
block thing {
a
b
c
}
block thing 3 {
e
f
}
В конце концов, в идеале вы обнаружите, что Блок 3 является «новым», а также «c» в Блоке 1.