Подтвердить что ты не робот

Как я могу отличить 2 файла, игнорируя ведущее белое пространство

У меня есть 2 исходных файла, они разные версии одной и той же вещи. Тем не менее, один из них прошел через другой редактор, который вносил изменения отступа, поэтому все строки различаются по разности.

Есть ли команда diff или фильтр, который я могу использовать для разграничения, так что вывод будет только строками, которые отличаются после игнорирования ведущих пробелов/вкладок?

4b9b3361

Ответ 1

diff имеет несколько вариантов, которые могут вам пригодиться:

   -E, --ignore-tab-expansion
          ignore changes due to tab expansion

   -Z, --ignore-trailing-space
          ignore white space at line end

   -b, --ignore-space-change
          ignore changes in the amount of white space

   -w, --ignore-all-space
          ignore all white space

   -B, --ignore-blank-lines
          ignore changes whose lines are all blank

Итак, diff -w old new следует игнорировать все пробелы и, таким образом, сообщать только о существенно разных строках.

Ответ 3

diff -bB file[12]
-b, --ignore-space-change
      ignore changes in the amount of white space
-B, --ignore-blank-lines
      ignore changes whose lines are all blank

Обратите внимание, что параметр -w игнорирует все пробелы перед удалением, поэтому строка, такая как this i s a line и this is a line в каждом файле, будет сравниваться как thisisaline и не будет сообщать о различиях.

Помимо проблемы с параметром -w, даже опция -b имеет незначительные проблемы и не игнорирует пробелы, если она возникает при прошивании строки

Итак, вы должны использовать sed, чтобы удалить эти пробелы, возникшие при первом запуске, затем выполните `diff -bB.

diff -bB <(sed 's/^[ \t]*//' file1) <(sed 's/^[ \t]*//' file2)