У меня есть два файла, которые при сравнении с diff показывают, что каждая строка изменилась. Когда я сравниваю их с diff -w
(игнорируя пробелы), это показывает несколько минимальных изменений, которые я ожидаю.
Очевидно, между пробелами в каждом файле есть некоторая разница, но я не знаю, что это такое и как их найти. Я попытался отредактировать файлы, чтобы убедиться, что пробел на самом деле является пробелом (в отличие от вкладок), но я не уверен, что еще делать.
Я использовал vim с, :set list on
чтобы подтвердить, что в конце строк нет пробела.
Я также считаю, что в каждом файле есть разделители строк в Linux, поскольку vim не показывал их ^M
в конце строк.
linux
diff
whitespace
Romski
источник
источник
diff
но многие редакторы по умолчанию в любом случае не делают это пространство видимым.vim
пользователь, то пытались ли вы использовать,vimdiff file1 file2
чтобы увидеть, в чем различия?Ответы:
Для
vim
пользователей есть удобная утилита, показывающая точные различия между файлами:Это поместит каждый файл в окна, бок о бок, и различия будут выделены цветом.
Некоторые полезные команды, когда в
vimdiff
В то время как в
vimdiff
, некоторые полезные команды:]c
: перейти к следующему изменению[c
: перейти к предыдущему изменениюctrl-W ctrl-W
: переключиться в другое окноzo
: открытые складкиzc
: закрыть складкипример
Вот пример
vimdiff
вxterm
сравнения двух версийcups
файла конфигурации:Вы можете видеть, что длинные участки одинаковых линий были свернуты. Их можно открыть снова с помощью
zo
.Цветовая схема будет варьироваться в зависимости от настроек вашего варианта. В приведенном выше примере, когда строка появляется в одном файле, но не в другом, этой строке выделяется темно-синий фон. В другом файле пропущенные строки обозначены пунктирными линиями. Когда линия появляется в обоих файлах, но имеет некоторые различия, неизмененные части линий имеют розовый фон, а измененные части имеют красный фон.
источник
В FreeBSD или в большинстве систем Linux вы можете передать вывод diff,
cat -v -e -t
чтобы показать различия между пробелами.Вкладки будут отображаться как
^I
, а$
будет отображаться в конце каждой строки, так что вы можете увидеть конечный пробел, а непечатаемые символы будут отображаться как^X
илиM-X
.Если у вас есть GNU coreutils (доступно в большинстве не занятых дистрибутивов Linux), это можно упростить до
В системах busybox используйте
catv -vet
.источник
Был ли один из файлов отредактирован на компьютере с Windows?
Стандартное завершение строки в Windows - это CRLF, где в Linux это просто LF (а в Mac это был CR, но я подозреваю, что это изменилось со времен OS X).
Попробуйте
wc -l
файлы и посмотрите, сколько строк, а затем посмотрите, не отличается ли разница в размере от количества строк (последняя строка может не заканчиваться в одном файле).источник
od
может помочь Команда Octal Dump может показывать содержимое в шестнадцатеричном формате. Это может помочь вам увидеть, какие байты, включая нулевые байты или неожиданный пробел, находятся в файле. Возможными общими причинами могут быть LF против CRLF, табуляции против пробелов или ASCII против юникода (у которых часто может быть нулевой байт перед каждым обычно видимым байтом).od -x filename
должен раскрыть любой из этих шаблонов. Если вы хотите более сложный способ просмотра файла, подойдет любой «шестнадцатеричный редактор». Приятно то,od
что, как иcut
команда, она встроена во многие системы Unix. Поэтому зачастую не требуется отдельная установка.Если вам нужно, чтобы файлы были более похожими,
tr
можете внести некоторые изменения иsed
сделать больше. Вероятно, я бы начал с того,ls -l
чтобы увидеть, какой файл больше, затем просмотрите байты, чтобы увидеть, что нужно изменить, а затем измените один из файлов, чтобы они казались более похожими.источник
Чтобы узнать, где настоящие пробелы и вкладки, вы можете заменить их,
sed
например:А теперь сравните два файла.
источник
cat
, как в superuser.com/a/913368/37154Следующее содержание было скопировано здесь из раздела «вопрос» выше, который был написан Ромски.
Оба
vimdiff
иdiff file1 file2 | cat -A
были очень полезны с точки зрения инструментов.Наконец, я нашел еще одну проблему. Некоторые из моих файлов были закодированы с помощью UTF-8 BOM. Это было выделено с помощью
diff file1 file2 | cat -A
. Это проявилось какM-oM-;M-?
в начале затронутого файла:Несмотря на ряд проблем, я перечислил несколько команд ниже для тех, кто нуждается в очистке своих файлов:
источник