Difere para realmente ignorar totalmente o espaço em branco

4

Eu estou procurando por um aplicativo que irá diferenciar dois arquivos e, na verdade, ignorar 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
}

i.e. ele mostraria que spaz no exemplo anterior tomou o lugar de bar em qualquer um dos outros exemplos. Só precisa comparar dois arquivos.

  • Pode ser um utilitário compatível com windows ou linux / unix / posix
  • Eu tentei o comando lin / unix diff -w , ele apenas ignora o espaço em branco se a diferença por linha for espaço em branco. Não vejo uma opção para ignorar totalmente o espaço em branco.
  • Eu também tentei o UECompare ou o Ultracompare, um utilitário de comparação não-livre para Windows.
por A.B. Carroll 05.10.2013 / 15:54

2 respostas

5

Você está procurando algo parecido com o comando tr ? Aqui estão as páginas de trabalho . Está incluído com msysgit , cygwin e gnuwin32 tools até onde eu sei.

Assim, você pode remover todo o espaço em branco antes de fazer a diferença, fazendo algo como:

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

Você pode alimentar a saída desse comando para diff e fazer com que funcione sem ter nenhum espaço em branco.

Por exemplo, eu tenho um arquivo chamado HelloWorldApp.java . Deixe-me mostrar como o tr 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.}}
    
por 05.10.2013 / 16:24
0

Apesar de ser orientado por linhas, diff poderia ser feito para fazer o que está sendo Requeridos. Grosso modo, você poderia fazer o diff -w e depois postar o processo saída do diff. Pode olhar para o resultado do diff e juntar vários pares de linhas para ver se eles (agora) correspondem à linha no outro arquivo.

Parece que pode ser O (n ^ 2) ou outra coisa desagradável, mas ainda assim ser muito útil se limitou-se a (digamos) não juntar, juntar 2 linhas, juntar 3 linhas no arquivo 1 X no join, junte 2 linhas, junte 3 linhas no arquivo 2 em uma "janela" em movimento da saída do diff. (onde X é ~ "produto cruzado")

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

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

    
por 25.04.2014 / 23:24