Как игнорировать некоторые различия в команде diff?

StackOverflow https://stackoverflow.com/questions/4434346

  •  09-10-2019
  •  | 
  •  

Вопрос

diff имеет вариант -I regexp, который игнорирует изменения, которые просто вставляют или удаляют строки, которые соответствуют данному REGEXP. Мне нужен аналог этого для этого, когда изменения между двумя линиями (скорее, а затем вставляют или удаляют строки).

Например, я хочу игнорировать все различия, как между "abXd" и "abYd", для данного X и Y.

Кажется diff не имеет таких способностей. Есть ли подходящая альтернатива для diff?

Это было полезно?

Решение

Вы можете отфильтровать два файла через sed Чтобы устранить строки, о которых вы не заботитесь. Общий рисунок /regex1/,/regex2/ d Чтобы удалить все между линиями, соответствующими двумя регесами. Например:

diff <(sed '/abXd/,/abYd/d' file1) <(sed '/abXd/,/abYd/d' file2)

Другие советы

Улучшение Ранее решение Джон Кугельман:

diff <(sed 's/ab[XY]d/abd/g' file1) <(sed 's/ab[XY]d/abd/g' file2)

Вероятно, вы можете искать! Эта версия нормализует конкретное изменение на каждой строке без удаления самой линии. Это позволяет разводить показывать любой Другие Различия, которые остаются на линии.

Предполагая, что x и y - одно символы, то -I 'ab[XY]d' Работает нормально для меня.

Вы можете использовать SED для замены экземпляров шаблона со стандартной строкой:

diff <(sed 's/ab[XY]d/ab__REPLACED__d/g' file1) <(sed 's/ab[XY]d/ab__REPLACED__d/g' file2)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top