2013-05-07 17 views
34

Ho 2 file sorgente, sono versioni differenti della stessa cosa. Tuttavia, si è passati attraverso un editor diverso che ha apportato modifiche al rientro, quindi tutte le linee sono visualizzate in diff.Come posso diff 2 file ignorando lo spazio bianco iniziale

Esiste un comando diff o un filtro che posso utilizzare per diff in modo che l'output sia solo linee diverse dopo aver ignorato gli spazi iniziali/tabulazioni?

risposta

46

diff ha alcune opzioni che possono essere utili a voi:

-E, --ignore-tab-expansion 
      ignore changes due to tab expansion 

    -Z, --ignore-trailing-space 
      ignore white space at line end 

    -b, --ignore-space-change 
      ignore changes in the amount of white space 

    -w, --ignore-all-space 
      ignore all white space 

    -B, --ignore-blank-lines 
      ignore changes whose lines are all blank 

Così diff -w old new dovrebbe ignorare tutti gli spazi e quindi riferire linee solo sostanzialmente diverse.

+6

Vale la pena notare che '-w' rimuove efficacemente tutti gli spazi bianchi dalle linee prima di confrontarli, quindi' ab' e 'a b' sono considerati identici. Preferisco '-b' perché ignora gli spazi bianchi _changes_, il che significa che' ab' e 'ab' sono considerati diversi ma' ab' e 'a' + _multiple spaces_ +' b' (mi dispiace, mini-Markdown non permetterebbe più spazi nel codice!) sono considerati uguali. –

+0

Come posso ignorare tutte le nuove righe? – Goldname

+2

Posso dire a 'diff' di ignorare espansioni di serie equivalenti per numeri trascendenti come e e pi? – geneorama

1

Se si sta usando le schede in modo non corretto, si can fix that

expand bad_file 
0
diff -bB file[12] 
-b, --ignore-space-change 
     ignore changes in the amount of white space 
-B, --ignore-blank-lines 
     ignore changes whose lines are all blank 

prega di notare che -w opzione ignorando tutti gli spazi bianchi prima diffing, quindi una linea come this i s a line e this is a line in ogni il file comparirà come thisisaline e non segnalerà le differenze.

Accanto di -w problema opzione, anche l'opzione -b ha problemi minori e che non ignora gli spazi bianchi, se venite a chiedere l'elemosina di una linea

Quindi si dovrebbe usare sed per rimuovere quelle spazi bianchi si sono verificati alla partenza prima poi fare `diff -bB.

Problemi correlati