специальные опции unix diff - PullRequest
       5

специальные опции unix diff

0 голосов
/ 04 января 2011

Как я могу различить 2 файла, чтобы:

  1. Мне наплевать на любые пробелы (опция -b)
  2. Мне плевать на позицию контента. (??)

Что я имею в виду под 2 выше: файл с a в строке1 и b в строке2 равен другому файлу с b в строке1 и a в строке 2.

Пожалуйста, дайте мне знать, если вопрос все еще не ясен.

спасибо.

1 Ответ

1 голос
/ 04 января 2011

Сначала отсортируйте два файла, а затем разведите их. Нет никакого способа убедить 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.

...