Diff para ignorar totalmente os espaços em branco

Diff para ignorar totalmente os espaços em branco

Estou procurando um aplicativo que diferencie dois arquivos e ignore todos os espaços em branco, por exemplo:

class foo { 
  bar
  spaz 
}

é igualmente equivalente a

class foo{bar spaz}

ou, também

classfoo { 
  barspaz}

mas não

classfoo { 
  spazspaz
}

ou seja, isso me mostraria que spazno exemplo anterior tomou o lugar de barqualquer um dos outros exemplos. Ele só precisa comparar 2 arquivos.

  • Pode ser um utilitário compatível com Windows ou Linux/unix/posix
  • Eu tentei o diff -wcomando lin/unix, ele só ignora espaços em branco se a diferençapor linhaé espaço em branco. Não vejo uma opção paratotalmenteignore o espaço em branco.
  • Também experimentei UECompare ou Ultracompare, um utilitário de comparação gratuito para Windows.

Responder1

Você está procurando algo parecido com o trcomando? Aqui está opáginas de manual. Está incluído em msysgit, cygwine gnuwin32 toolsaté onde eu sei.

Portanto, você pode remover todos os espaços em branco antes da comparação fazendo algo como:

tr --delete '[:space:]' <filename.txt

Você pode então alimentar a saída desse comando diffe fazê-lo funcionar sem nenhum espaço em branco.

Por exemplo, tenho um arquivo chamado HelloWorldApp.java. Deixe-me mostrar como tro processa:

C:\temp>cat HelloWorldApp.java
class HelloWorldApp {
    public static void main(String[] args) {
        System.out.println("Hello World!"); // Display the string.
    }
}
C:\temp>tr -d '[:space:]' <HelloWorldApp.java
classHelloWorldApp{publicstaticvoidmain(String[]args){System.out.println("HelloWorld!");//Displaythestring.}}

Responder2

Apesar de ser orientado por linha, diffpoderiaser obrigado a fazer o que está sendo solicitado. Aproximadamente, você poderia fazer o diff -w e depois processar a saída do diff. Ele poderia olhar para a saída diff e juntar vários pares de linhas para ver se eles (agora) correspondem à linha do outro arquivo.

Parece que pode ser O(n^2) ou outra coisa desagradável, mas ainda seria muito útil se se limitasse a (digamos) sem junção, junte 2 linhas, junte 3 linhas no arquivo 1 X sem junção, junte 2 linhas, junte 3 linhas no arquivo 2 em uma "janela" móvel da saída diff. (onde X é ~ "produto vetorial")

Na verdade, parece um trabalho que um script de pós-processamento de saída diff Perl poderia fazer com poucas horas de trabalho (dependendo de sua habilidade de programação (Perl))

Talvez quando eu tiver alguma tarefa que realmente não quero fazer no trabalho... :-)

informação relacionada