diff

display differences between two files (or directories)

diff [options]   old-file|-   new-file|-           - reads from standard input.

diff directory file    Compare directory/file with file


diff directory directory
 Compares files in the directories, in alphabetical order.
This comparison is not recursive unless --recursive is given.
diff never compares the actual contents of a directory as if it were a file. The file that is fully specified may not be standard input, because standard input is nameless and the notion of "file with the same name" does not apply.

Use -- to terminate options when specifing file names which begin with a -.
Multiple single letter options can be combined (example: ‑wyW50)

Options to ignore "insignificant" differences
-i
--ignore-case
 
-B
--ignore-blank-lines
Ignore differences that just insert or delete Blank lines
-b
-ignore-space-change
Ignore differences in amount of blanks
-w
-ignore-all-space
Ignore white space lines,
including ␍␊ (0D0A ) verses (0A alone) as in Apple Mac vs linux vs MSWindows.
-I regexp
--ignore-matching-lines= regexp
Ignore differences that just insert or delete lines that match regexp.
Option affecting amount of output
-q
--brief
quite, do not show differences, only whether the files differ.
Output "Files old-file and new-file differ" or nothing

Useful when comparing directories. See cmp for "quiter".

To check the return code $?

diff --brief … xxx xxx'
if [ $? -gt 0  ]; then echo -n  $'\a ' ;fi  #alert bell 
-t
--expand-tabs
to spaces in the output to preserve alignment.
-T
--initial-tab
Output a Tab rather than a space before the text of a line in normal or context format, causes the alignment to look normal.
--side-by-side
-y
  diff -y dfdf dfdf_1
Avail   Mounted                                                 Avail   Mounted
695M    /                                                       695M    /
170M    /Volumes/DATA                                           170M    /Volumes/DATA
56K     /Volumes/BACKUP_2                                       56K     /Volumes/BACKUP_2
919M    /Volumes/TBD                                          | 898M    /Volumes/TBD
xxxx                                                            xxxx
-W columns
--width=columns
diff -W70 --side-by-side dfdf dfdf_1
Avail   Mounted                         Avail   Mounted
695M    /                               695M    /
170M    /Volumes/DATA                   170M    /Volumes/DATA
56K     /Volumes/BACKUP_2               56K     /Volumes/BACKUP_2
919M    /Volumes/TBD              |     898M    /Volumes/TBD
xxxx                                    xxxx
--suppress-common-lines
diff  -wyW$COLUMNS --su    dfdf dfdf_1
diff -yW50 --suppress dfdf dfdf_1 
919M    /Volumes/TBD                                         | 898M    /Volumes/TBD
--leftcolumn only
diff -yW60 --left dfdf dfdf_1
Avail   Mounted              (
695M    /                    (
170M    /Volumes/DATA        (
56K     /Volumes/BACKUP_2    (
919M    /Volumes/TBD         |  898M    /Volumes/TBD
xxxx                         ( 

--horizon-lines=lines Do not discard the last lines lines of the common prefix and the first lines lines of the common suffix.
--from-file= file Compare file to all operands. file can be a directory.
--to-file= file Compare all operands to file. file can be a directory.
-l
--paginate
Pass the output through pr to paginate it.
-a
--text
Treat all files as ASCII text and compare them line-by-line, even if they do not seem to be text.
-v
--version
 

Show the differences with some lines before and after the differences.

  -c Use the context output format
  -C lines
--context=lines. Show lines of context. Default 3.

diff  -c dfdf1 dfdf2
*** dfdf1 Tue Sep  5 18:10:15 2006  ← mod date of file prefixed with stars 
--- dfdf2 Tue Sep  5 18:10:24 2006
***************  ← seperator
*** 4,7 **** ← position (column,line) where difference starts in dfdf1
  1.3G  /Volumes/PHOTOS_1
  2.7G  /Volumes/PHOTOS_2
  56K   /Volumes/BACKUP_2
! 919M  /Volumes/TBD
 ↖ position where difference starts
----4,7 ---- ← position (column,line) where difference starts in dfdf2
  1.3G  /Volumes/PHOTOS_1
  2.7G  /Volumes/PHOTOS_2
  56K   /Volumes/BACKUP_2
! 898M  /Volumes/TBD 
  -e
--ed Make output that is a valid ed script.
7c
898M    /Volumes/TBD
.

  -f
--forward-ed Make output that looks vaguely like an ed script but has changes in the order they appear in the file.

diff  -f dfdf dfdf_1
c7
898M    /Volumes/TBD
.

  -F regexp In context and unified format for each hunk of differences, show some of the last preceding line that matches regexp.

  -n
--rcs Output RCS-format(Revision Control Systems) diffs; like -f except that each command specifies the number of lines affected.

diff  -n dfdf dfdf_1
d7 1
a7 1
898M    /Volumes/TBD

  -L label
--label=label Use label instead of the file name in the context and unified format headers.

-D name
--ifdef=name Make merged if-then-else format output, conditional on the preprocessor macro name.

--line-format=format Use format to output all input lines in in-then-else format.

%L contents of line %l , excluding any trailing newline
%[-]*[width][.[prec*{doxX}*n printf-style spec for input line number
%% the % character
x the single character x (i.e. any character)
%c'\OOO' the character with octal code OOO
diff --line-format="%8dn  %L" dfdf dfdf_1
       1  Avail Mounted
       2  695M  /
       3  170M  /Volumes/DATA
       4  1.3G  /Volumes/PHOTOS_1
       5  2.7G  /Volumes/PHOTOS_2
       6  56K   /Volumes/BACKUP_2
       7  919M  /Volumes/TBD
       7  898M  /Volumes/TBD
       8  xxxx
--old-line-format=format... a line taken from just the first file
--new-line-format=format ...a line taken from just the second file
--unchanged-line-format=format ... a line common to both files

% lines from FILE1
%> lines from FILE2
%= lines common to FILE1 and FILE2
%% %
%c'C' the single character C
%c'\OOO' the character with octal code OOO
%[-][WIDTH][.[PREC]]{doxX}LETTER printf-style spec for LETTER
LETTERs are as follows for new group, lower case for old group:
F first line number
L last line number
N number of lines = L-F+1
E F-1
M L+1
--changed-group-format=format Use format to output a line group containing differing lines from both files
--old-group-format=format ... the first file
--new-group-format=format ...the second
--unchanged-group-format=format ... of common lines from both files

-u Use the unified output format.
-U lines
--unified[=lines]
Use the unified output format, showing lines of context. default 3.
#cat 0

Avail   Mounted
10632   /
791     /Volumes/DATA
560     /Volumes/PHOTOS
3504    /Volumes/BACKUPS
4542    /Volumes/linux
934     /Volumes/SWAP
#cat 00

Avail   Mounted
10639   /
791     /Volumes/DATA
560     /Volumes/PHOTOS
3504    /Volumes/BACKUPS
4542    /Volumes/linux
934     /Volumes/SWAP

diff -u 0 00
--- 0   2007-01-14 21:07:11.000000000 -0500
+++ 00  2007-01-14 21:15:54.000000000 -0500
@@ -1,5 +1,5 @@
 Avail  Mounted
-10632  /
+10639  /
 791    /Volumes/DATA
 560    /Volumes/PHOTOS
 3504   /Volumes/BACKUPS

-p
--show-c-function
--show-function-line=regexp In context and unified format, for each hunk of differences, show some of the last preceding line that matches regexp.

--sdiff-merge-assist Print extra information to help sdiff. sdiff uses this option when it runs diff. This option is not intended for users to use directly.

-d --minimal Change the algorithm to perhaps find a smaller set of changes. slower (sometimes much slower).
-H
--speed-large-files Use Heuristics to speed handling of large files that have numerous scattered small changes.

When comparing directories:

-s
--report-identical-files
Report are identical when files are the same,
     otherwise no output is produced.
-q
--brief
quite, do not show differences, only whether the files differ.
Output "Files old-file and new-file differ" or nothing
-x pattern
--exclude=pattern
exclude files and subdirectories whose basenames match pattern.
--exclude-from=file exclude files and subdirectories whose basenames match any pattern in file.
-X file exclude files and subdirectories whose basenames match any pattern contained in file.
-r
--recursive
compare subdirectories .
-N
--new-file
a file found in only in one directory is compared to an empty file.
-P
--unidirectional-new-file
a file occuring only in the second directory id compared to an empty file.
-S file
--starting-file=file
start with file. For resuming an aborted comparison.

See

cmp , comm, diff3, ed, patch, pr, sdiff.

Diagnostics

exit status
0 no differences were found,
1 some differences were found
2 means trouble ( binary file mismatch, file not found/accessible,...).


cmp options file1 file2

-b
--print-bytes
output differing bytes.
file1 file2 differ: byte 1232, line 38 is 
 164 t  
163 s


file1


file2
-i SKIP
--ignore-initial=SKIP
Skip the first SKIP bytes of input.
-i SKIP1:SKIP2
--ignore-initial=SKIP1:SKIP2
Skip the first SKIP1 bytes of FILE1 and the first bytes of FILE2.
-l
--verbose
Output byte numbers and values of all differing bytes.
-n LIMIT
--bytes=LIMIT
Compare at most LIMIT bytes.
-s
--quiet
--silent
Output nothing; test the return value
-v
--version
--help
Return values: 0 - files are identical; 1 - files differ; 2 - inaccessible or missing argument

>cmp -l F801191247/weather_station.dat F801191257/weather_station.dat | column  -c140 -x

 76 245  75  77   1  24  78 127 203  79  75 274  80 263 200  81  76  70  82 221 170  83 261 156
 84 323 337  85   6  23  86 347 324  87 164  34  88 154 247  89 147 217  90 131 111  91  37 334
 92 222  30  93 267 375  94  57 232  95 366 227  96 244 367  97   0  10  98 314  14  99 203 365
100 326 272 101 116 352 102 244  71 103  35  16 104 202 270 105  56 102 106 341 357 107 372 125
108 124 114 109 143 253 110 217  61 111 223 166 112   3 342 113 263 331 114 141 367 115 325 164
116 135 341 117  47 352 118 200  72 119  34 266 120 170 116 121 261 107 122   6  54 123  73  23
124  37 121 125 324 173 126 171 125 127 252   3 128  16  21 129 123 101 130  16 313 131 306 257
132 175  77 133  10 125 134  66 175 135 253 167 136 153   1 137 204  27 138 264 162 139 245  13




comm [OPTION]... FILE1 FILE2

Compare sorted files FILE1 and FILE2 line by line displaying lines in common.

With no options, produce three-column output.
first Column contains lines unique to FILE1,
second column contains lines unique to FILE2 and
last column contains lines common to both files.

-1 suppress lines unique to FILE1 (first column)
-2 suppress lines unique to FILE2 (secondcolumn)
-3 suppress lines that appear in both files (last column)

--help
--version output version information and exit

> cat 1
aaaaaaaaa
bbbbbbbb
ccccccc
> cat 2
aaaaaaaaa
b222bbbb
ccccccc
> comm 1 2
                aaaaaaaaa
        b222bbbb
bbbbbbbb
                ccccccc

sdiff - side-by-side merge of file differences sdiff [option]... file1 file2

Side-by-side merge of file differences.

Ignore minor differences
-i
--ignore-case
 
-E
--ignore-tab-expansion
due to tab expansion.
-b
--ignore-space-change
amount of white space.
-W
--ignore-all-space
all white space.
-B
--ignore-blank-lines
are all blank.
-I RE
--ignore-matching-lines=RE
matching RE.
--strip-trailing-cr Strip trailing carriage return on input.
-a
--text
Treat all files as ASCII text.
output controls
-w NUM
--width=NUM
at most NUM (default 130) columns per line.
-l
--left-column
only the left column of common lines.
-s
--suppress-common-lines
 
-t
--expand-tabs
Expand tabs to spaces in output.
Performace
-d
--minimal
Try hard to find a smaller set of changes.
-H
--speed-large-files
Assume large files and many scattered small changes.
-o FILE
--output=FILE
output to FILE.
--diff-program=PROGRAM Use PROGRAM to compare files.
-v
--version

--help

If a FILE is `-', read standard input.

diff aka top