Eu tenho dois arquivos que, quando comparados com o diff, mostram que todas as linhas foram alteradas. Quando os comparo com diff -w
(ignorando espaço em branco), ele mostra as poucas mudanças mínimas que eu espero.
Obviamente, há alguma diferença entre os espaços em branco em cada arquivo, mas não sei o que são ou como encontrá-los. Tentei editar os arquivos para garantir que o espaço em branco seja realmente caracteres de espaço (em oposição a guias), mas não tenho certeza do que mais fazer.
Eu usei o vim com :set list on
para confirmar que não havia espaço à direita no final das linhas.
Eu também acredito que cada arquivo possui terminadores de linha Linux, pois o vim não mostrava ^M
o final das linhas.
linux
diff
whitespace
Romski
fonte
fonte
diff
mas muitos editores, por padrão, não tornam esse espaço visível.vim
usuário, já tentou usarvimdiff file1 file2
para ver quais são as diferenças?Respostas:
Para os
vim
usuários, existe um utilitário útil para mostrar as diferenças exatas entre os arquivos:Isso colocará cada arquivo nas janelas, lado a lado, e as diferenças serão destacadas em cores.
Alguns comandos úteis quando em
vimdiff
Enquanto estiver dentro
vimdiff
, alguns comandos úteis são:]c
: pula para a próxima alteração[c
: pula para a alteração anteriorctrl-W ctrl-W
: mudar para outra janelazo
: dobras abertaszc
: fechar dobrasExemplo
Aqui está um exemplo de
vimdiff
umaxterm
comparação entre duas versões de umcups
arquivo de configuração:Você pode ver que seções longas de linhas idênticas foram recolhidas. Eles podem ser abertos novamente com
zo
.O esquema de cores varia de acordo com as configurações da sua opção. No exemplo acima, quando uma linha aparece em um arquivo, mas não no outro, essa linha recebe um fundo azul escuro. No outro arquivo, as linhas ausentes são indicadas por linhas tracejadas. Quando uma linha aparece nos dois arquivos, mas possui algumas diferenças, as partes inalteradas têm um fundo rosa e as partes alteradas têm um fundo vermelho.
fonte
No FreeBSD ou na maioria dos sistemas Linux, você pode canalizar a saída do diff
cat -v -e -t
para mostrar diferenças de espaço em branco.As guias serão mostradas como
^I
, a$
será mostrada no final de cada linha, para que você possa ver espaços em branco à direita, e os caracteres não imprimíveis serão exibidos como^X
ouM-X
.Se você possui GNU coreutils (disponível na maioria das distribuições Linux não-busybox), isso pode ser simplificado para
Em sistemas de ocupado, use
catv -vet
.fonte
Um dos arquivos foi editado em uma máquina Windows?
O término de linha padrão no Windows é CRLF, onde no Linux é simplesmente LF (e nos Macs costumava ser CR, mas suspeito que isso tenha mudado desde o OS X).
Experimente
wc -l
os arquivos e veja quantas linhas e veja se a diferença de tamanho é igual ao número de linhas (a última linha pode não ser finalizada em um arquivo).fonte
od
pode ajudar. O comando Octal Dump pode mostrar o conteúdo em hexadecimal. Isso pode ajudá-lo a ver quais bytes, incluindo bytes nulos ou espaço em branco inesperado, estão em um arquivo. As possíveis causas comuns podem ser LF vs CRLF, guias vs espaços ou ASCII vs Unicode (que geralmente podem ter apenas um byte nulo antes de cada byte normalmente visível).od -x filename
deve revelar qualquer um desses padrões. Se você deseja uma maneira mais elaborada de visualizar o arquivo, qualquer "editor hexadecimal" pode ser bom. O legalod
é que, como ocut
comando, ele está embutido em muitos sistemas Unix. Portanto, muitas vezes, nenhuma instalação separada é necessária.Se você precisar que os arquivos sejam mais parecidos,
tr
faça algumas alterações esed
faça mais. Eu provavelmente começarials -l
a ver qual arquivo é maior, depois visualizaria os bytes para ver o que precisa ser alterado e depois alteraria um dos arquivos para que parecessem mais semelhantes.fonte
Para descobrir onde estão os espaços em branco e as guias reais, você pode substituí-los usando,
sed
por exemplo:E agora compare os dois arquivos.
fonte
cat
, como em superuser.com/a/913368/37154O conteúdo a seguir foi copiado aqui da seção "pergunta" acima, escrita por Romski.
Ambos
vimdiff
ediff file1 file2 | cat -A
foram muito úteis do ponto de vista das ferramentas.Por fim, encontrei mais um problema. Alguns dos meus arquivos foram codificados com UTF-8 BOM. Isso foi destacado usando
diff file1 file2 | cat -A
. Isso se manifestou comoM-oM-;M-?
no início do arquivo afetado:Embora tenha havido vários problemas, listei alguns comandos abaixo para aqueles que precisam limpar seus arquivos:
fonte