Как игнорировать некоторые различия в команде diff?
Вопрос
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)