
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 spaz
no exemplo anterior tomou o lugar de bar
qualquer 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 -w
comando 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 tr
comando? Aqui está opáginas de manual. Está incluído em msysgit
, cygwin
e gnuwin32 tools
até 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 diff
e fazê-lo funcionar sem nenhum espaço em branco.
Por exemplo, tenho um arquivo chamado HelloWorldApp.java
. Deixe-me mostrar como tr
o 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... :-)