Difference in whitespace between two files on Linux
On FreeBSD or most Linux systems, you can pipe the output of diff through cat -v -e -t
to show whitespace differences.
diff file1 file2 | cat -vet
Tabs will be shown as ^I
, a $
will be shown at the end of each line so that you can see trailing whitespace, and nonprinting characters will be displayed as ^X
or M-X
.
If you have GNU coreutils (available on most non-busybox Linux distributions), this can be simplified to
diff file1 file2 | cat -A
On busybox systems, use catv -vet
.
For vim
users, there is a handy utility to show exact differences between files:
vimdiff file1 file2
This will put each file in windows, side-by-side, and differences with highlighted in color.
Some useful commands when in vimdiff
While in vimdiff
, some useful commands are:
]c
: jump to next change[c
: jump to previous changectrl-W ctrl-W
: switch to other windowzo
: open foldszc
: close folds
Example
Here is an example of vimdiff
in an xterm
comparing two versions of a cups
configuration file:
You can see that long sections of identical lines have been collapsed. They can be opened again with zo
.
The color scheme will vary depending on your option settings. In the above example, when a line appears in one file but not the other, that line is given a dark blue background. In the other file, the missing lines are indicated by dashed lines. When a line appears in both files but has some differences, the unchanged parts of the lines have a pink background and the changed parts have a red background.
Was one of the files edited on a Windows machine?
Standard line termination on Windows is CRLF, where on Linux it's simply LF (and on Macs it used to be CR, but I suspect that's changed since OS X).
Try wc -l
on the files and see how many lines, then see if the size difference is the same as the number of lines (last line may not be terminated in one file).