How can I diff 2 files while ignoring leading white space

Diff

Diff Problem Overview


I have 2 source files, they are different versions of the same thing. However, one has been through a different editor that made indent changes, so all the lines are showing up different in diff.

Is there a diff command or a filter I can use to diff with so that the output will only be lines that are different after ignoring the leading spaces/tabs?

Diff Solutions


Solution 1 - Diff

diff has some options that can be useful to you:

   -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

So diff -w old new should ignore all spaces and thus report only substantially different lines.

Solution 2 - Diff

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

Please note that -w option will ignoring all whitespaces before diffing, so a line like this i s a line and this is a line in each file will compare as thisisaline and will not report differences.

Beside of -w option problem, even -b option has minor issues and that doesn't ignore whitespaces if come at the begging of a line

So you should use sed to remove those whitespaces occurred at start first then do `diff -bB.

diff -bB <(sed 's/^[ \t]*//' file1) <(sed 's/^[ \t]*//' file2)

Solution 3 - Diff

If one is using tabs incorrectly, you can fix that

expand bad_file

Solution 4 - Diff

My open-source Linux tool 'dif' compares files while ignoring various differences including whitespace.

It has many other options for ignoring comments or timestamps, sorting the input files, doing search/replace, ignoring certain lines, etc.

After preprocessing the input files, it runs the Linux tools meld, gvimdiff, tkdiff, or kompare on these intermediate files.

Installation is not required, just download and run the 'dif' executable from https://github.com/koknat/dif

To condense any whitespace to a single space, use the -white option:

dif file1 file2 -white

To remove all whitespace (except for newlines), use the -nowhite option:

dif file1 file2 -nowhite

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionChing LiuView Question on Stackoverflow
Solution 1 - DiffLev LevitskyView Answer on Stackoverflow
Solution 2 - DiffαғsнιηView Answer on Stackoverflow
Solution 3 - DiffZomboView Answer on Stackoverflow
Solution 4 - DiffChris KoknatView Answer on Stackoverflow