Как я могу отличить 2 файла, игнорируя ведущее белое пространство
У меня есть 2 исходных файла, они разные версии одной и той же вещи. Тем не менее, один из них прошел через другой редактор, который вносил изменения отступа, поэтому все строки различаются по разности.
Есть ли команда diff или фильтр, который я могу использовать для разграничения, так что вывод будет только строками, которые отличаются после игнорирования ведущих пробелов/вкладок?
Ответы
Ответ 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
следует игнорировать все пробелы и, таким образом, сообщать только о существенно разных строках.
Ответ 2
Если вы неправильно используете вкладки, вы
может исправить это
expand bad_file
Ответ 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)