[BACK]Return to diff.1 CVS log [TXT][DIR] Up to [local] / src / usr.bin / diff

Annotation of src/usr.bin/diff/diff.1, Revision 1.24

1.24    ! jmc         1: .\" $OpenBSD: diff.1,v 1.23 2004/01/07 17:19:05 otto Exp $
1.6       millert     2: .\"
1.2       deraadt     3: .\" Copyright (c) 1980, 1990, 1993
                      4: .\"    The Regents of the University of California.  All rights reserved.
1.1       deraadt     5: .\"
1.2       deraadt     6: .\" Redistribution and use in source and binary forms, with or without
                      7: .\" modification, are permitted provided that the following conditions
                      8: .\" are met:
                      9: .\" 1. Redistributions of source code must retain the above copyright
                     10: .\"    notice, this list of conditions and the following disclaimer.
                     11: .\" 2. Redistributions in binary form must reproduce the above copyright
                     12: .\"    notice, this list of conditions and the following disclaimer in the
                     13: .\"    documentation and/or other materials provided with the distribution.
1.4       deraadt    14: .\" 3. Neither the name of the University nor the names of its contributors
1.2       deraadt    15: .\"    may be used to endorse or promote products derived from this software
                     16: .\"    without specific prior written permission.
1.1       deraadt    17: .\"
1.2       deraadt    18: .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
                     19: .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
                     20: .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
                     21: .\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
                     22: .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
                     23: .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
                     24: .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
                     25: .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
                     26: .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
                     27: .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
                     28: .\" SUCH DAMAGE.
1.1       deraadt    29: .\"
1.2       deraadt    30: .\"     @(#)diff.1     8.1 (Berkeley) 6/30/93
                     31: .\"
1.16      millert    32: .Dd July 21, 2003
1.1       deraadt    33: .Dt DIFF 1
1.5       jmc        34: .Os
1.1       deraadt    35: .Sh NAME
                     36: .Nm diff
                     37: .Nd differential file and directory comparator
                     38: .Sh SYNOPSIS
                     39: .Nm diff
1.23      otto       40: .Op Fl abdilpqtTw
1.6       millert    41: .Oo
                     42: .Fl c | Fl e | Fl f |
1.9       millert    43: .Fl n | Fl u
1.6       millert    44: .Oc
1.16      millert    45: .Op Fl L Ar label
1.6       millert    46: .Ar file1 file2
                     47: .Nm diff
1.23      otto       48: .Op Fl abdilpqtTw
1.16      millert    49: .Op Fl L Ar label
                     50: .Fl C Ar number
1.6       millert    51: .Ar file1 file2
                     52: .Nm diff
1.19      otto       53: .Op Fl abdilqtw
1.16      millert    54: .Fl D Ar string
1.1       deraadt    55: .Ar file1 file2
                     56: .Nm diff
1.23      otto       57: .Op Fl abdilpqtTw
1.16      millert    58: .Op Fl L Ar label
                     59: .Fl U Ar number
1.1       deraadt    60: .Ar file1 file2
                     61: .Nm diff
1.23      otto       62: .Op Fl abdilNPpqtTw
1.6       millert    63: .Oo
                     64: .Fl c | Fl e | Fl f |
1.9       millert    65: .Fl n | Fl u
1.6       millert    66: .Oc
1.11      millert    67: .Bk -words
1.16      millert    68: .Op Fl L Ar label
1.1       deraadt    69: .Op Fl r
                     70: .Op Fl s
1.6       millert    71: .Op Fl S Ar name
1.11      millert    72: .Op Fl X Ar file
                     73: .Op Fl x Ar pattern
                     74: .Ek
1.1       deraadt    75: .Ar dir1 dir2
                     76: .Sh DESCRIPTION
                     77: The
1.5       jmc        78: .Nm
1.1       deraadt    79: utility compares the contents of
                     80: .Ar file1
                     81: and
                     82: .Ar file2
                     83: and writes to the standard output the list of changes necessary to
                     84: convert one file into the other.
                     85: No output is produced if the files are identical.
                     86: .Pp
1.22      jmc        87: Output options (mutually exclusive):
1.2       deraadt    88: .Bl -tag -width Ds
                     89: .It Fl c
1.6       millert    90: Produces a diff with 3 lines of context.
1.1       deraadt    91: With
                     92: .Fl c
                     93: the output format is modified slightly:
1.21      jmc        94: the output begins with identification of the files involved and
1.1       deraadt    95: their creation dates and then each change is separated
1.21      jmc        96: by a line with fifteen *'s.
1.1       deraadt    97: The lines removed from
                     98: .Ar file1
1.5       jmc        99: are marked with
                    100: .Sq \-\ \& ;
                    101: those added to
1.1       deraadt   102: .Ar file2
1.5       jmc       103: are marked
                    104: .Sq \+\ \& .
                    105: Lines which are changed from one file to the other are marked in
                    106: both files with
                    107: .Sq !\ \& .
1.19      otto      108: Changes which lie within 3 lines of each other are grouped together on
                    109: output.
1.2       deraadt   110: .It Fl e
1.5       jmc       111: Produces output in a form suitable as input for the editor utility,
1.1       deraadt   112: .Xr ed 1 ,
                    113: which can then be used to convert file1 into file2.
                    114: .Pp
                    115: Extra commands are added to the output when comparing directories with
                    116: .Fl e ,
                    117: so that the result is a
1.5       jmc       118: .Xr sh 1
1.1       deraadt   119: script for converting text files which are common to the two directories
                    120: from their state in
                    121: .Ar dir1
                    122: to their state in
                    123: .Ar dir2 .
1.2       deraadt   124: .It Fl f
1.5       jmc       125: Identical output to that of the
1.1       deraadt   126: .Fl e
1.5       jmc       127: flag, but in reverse order.
                    128: It cannot be digested by
1.1       deraadt   129: .Xr ed 1 .
1.2       deraadt   130: .It Fl n
1.5       jmc       131: Produces a script similar to that of
1.1       deraadt   132: .Fl e ,
                    133: but in the opposite order and with a count of changed lines on each
1.5       jmc       134: insert or delete command.
                    135: This is the form used by
                    136: .Xr rcsdiff 1 .
1.13      millert   137: .It Fl q
                    138: Just print a line when the files differ.
                    139: Does not output a list of changes.
1.6       millert   140: .It Fl u
                    141: Produces a
                    142: .Em unified
                    143: diff with 3 lines of context.
                    144: A unified diff is similar to the context diff produced by the
                    145: .Fl c
                    146: option.
                    147: However, unlike with
                    148: .Fl c ,
                    149: all lines to be changed (added and/or removed) are present in
                    150: a single section.
                    151: .It Fl C Ar number
                    152: Like
                    153: .Fl c
                    154: but produces a diff with
                    155: .Ar number
                    156: lines of context.
                    157: .It Fl D Ar string
1.5       jmc       158: Creates a merged version of
1.1       deraadt   159: .Ar file1
                    160: and
                    161: .Ar file2
                    162: on the standard output, with C preprocessor controls included so that
                    163: a compilation of the result without defining
                    164: .Ar string
1.5       jmc       165: is equivalent to compiling
1.1       deraadt   166: .Ar file1 ,
                    167: while defining
                    168: .Ar string
                    169: will yield
                    170: .Ar file2 .
1.6       millert   171: .It Fl U Ar number
                    172: Like
                    173: .Fl u
                    174: but produces a diff with
                    175: .Ar number
                    176: lines of context.
1.2       deraadt   177: .El
1.1       deraadt   178: .Pp
                    179: Comparison options:
1.2       deraadt   180: .Bl -tag -width Ds
1.11      millert   181: .It Fl a
                    182: Treat all files as ASCII.
1.2       deraadt   183: .It Fl b
1.5       jmc       184: Causes trailing blanks (spaces and tabs) to be ignored, and other
1.1       deraadt   185: strings of blanks to compare equal.
1.22      jmc       186: .It Fl d
                    187: Try very hard to produce a diff as small as possible.
                    188: This may consume a lot of processing power and memory when processing
                    189: large files with many changes.
1.16      millert   190: .It Fl i
                    191: Ignores the case of letters.
                    192: E.g.,
                    193: .Dq A
                    194: will compare equal to
                    195: .Dq a .
1.14      millert   196: .It Fl l
                    197: Long output format; each text file
                    198: .Nm diff Ns \'d
                    199: is piped through
                    200: .Xr pr 1
                    201: to paginate it;
                    202: other differences are remembered and summarized
                    203: after all text file differences are reported.
1.16      millert   204: .It Fl L Ar label
                    205: Print
                    206: .Ar label
                    207: instead of the first file name and time in the context or unified diff header.
1.23      otto      208: .It Fl p
                    209: With unified and context diffs, show with each change
                    210: the first 40 characters of the last line before the context beginning
                    211: with a letter, an underscore or a dollar sign.
                    212: For C source code following standard layout conventions, this will
                    213: show the prototype of the function the change applies to.
1.2       deraadt   214: .It Fl t
1.5       jmc       215: Will expand tabs in output lines.
                    216: Normal or
1.1       deraadt   217: .Fl c
                    218: output adds character(s) to the front of each line which may screw up
                    219: the indentation of the original source lines and make the output listing
1.5       jmc       220: difficult to interpret.
                    221: This option will preserve the original source's indentation.
1.16      millert   222: .It Fl T
                    223: Print a tab rather than a space before the rest of the line for the
                    224: normal, context or unified output formats.
                    225: This makes the alignment of tabs in the line consistent.
1.2       deraadt   226: .It Fl w
1.5       jmc       227: Is similar to
1.1       deraadt   228: .Fl b
1.5       jmc       229: but causes whitespace (blanks and tabs) to be totally ignored.
                    230: E.g.,
                    231: .Dq if (\ \&a == b \&)
                    232: will compare equal to
                    233: .Dq if(a==b) .
1.2       deraadt   234: .El
1.1       deraadt   235: .Pp
                    236: Directory comparison options:
1.2       deraadt   237: .Bl -tag -width Ds
1.11      millert   238: .It Fl N
                    239: If a file is found in only one directory, act as if it was found in the
                    240: other directory too but was of zero size.
1.12      millert   241: .It Fl P
                    242: If a file is found only in
                    243: .Ar dir2 ,
                    244: act as if it was found in
                    245: .Ar dir1
                    246: too but was of zero size.
1.2       deraadt   247: .It Fl r
1.5       jmc       248: Causes application of
                    249: .Nm
1.1       deraadt   250: recursively to common subdirectories encountered.
1.2       deraadt   251: .It Fl s
1.5       jmc       252: Causes
                    253: .Nm
1.1       deraadt   254: to report files which are the same, which are otherwise not mentioned.
1.6       millert   255: .It Fl S Ar name
1.5       jmc       256: Re-starts a directory
                    257: .Nm
                    258: in the middle, beginning with file
1.1       deraadt   259: .Ar name .
1.11      millert   260: .It Fl X Ar file
                    261: Exclude files and subdirectories from comparison whose basenames match
                    262: lines in
                    263: .Ar file .
                    264: Multiple
                    265: .Fl X
                    266: options may be specified.
                    267: .It Fl x Ar pattern
                    268: Exclude files and subdirectories from comparison whose basenames match
                    269: .Ar pattern .
                    270: Patterns are matched using shell-style globbing via
                    271: .Xr fnmatch 3 .
                    272: Multiple
                    273: .Fl x
                    274: options may be specified.
1.2       deraadt   275: .El
1.1       deraadt   276: .Pp
                    277: If both arguments are directories,
1.5       jmc       278: .Nm
1.1       deraadt   279: sorts the contents of the directories by name, and then runs the
                    280: regular file
1.5       jmc       281: .Nm
1.1       deraadt   282: algorithm, producing a change list,
                    283: on text files which are different.
                    284: Binary files which differ,
                    285: common subdirectories, and files which appear in only one directory
                    286: are described as such.
                    287: .Pp
                    288: If only one of
                    289: .Ar file1
                    290: and
                    291: .Ar file2
                    292: is a directory,
1.5       jmc       293: .Nm
1.1       deraadt   294: is applied to the non-directory file and the file contained in
                    295: the directory file with a filename that is the same as the
                    296: last component of the non-directory file.
                    297: .Pp
1.2       deraadt   298: If either
1.1       deraadt   299: .Ar file1
                    300: or
                    301: .Ar file2
                    302: is
1.2       deraadt   303: .Sq Fl ,
1.1       deraadt   304: the standard input is
                    305: used in its place.
                    306: .Ss Output Style
                    307: The default (without
                    308: .Fl e ,
                    309: .Fl c ,
                    310: or
                    311: .Fl n
1.5       jmc       312: .\" -C
1.1       deraadt   313: options)
                    314: output contains lines of these forms, where
                    315: .Va XX , YY , ZZ , QQ
                    316: are line numbers respective of file order.
                    317: .Pp
1.2       deraadt   318: .Bl -tag -width "XX,YYcZZ,QQ" -compact
                    319: .It Li XX Ns Ic a Ns Li YY
1.1       deraadt   320: At (the end of) line
                    321: .Va XX
                    322: of
                    323: .Ar file1 ,
                    324: append the contents
                    325: of line
                    326: .Va YY
                    327: of
                    328: .Ar file2
                    329: to make them equal.
1.2       deraadt   330: .It Li XX Ns Ic a Ns Li YY,ZZ
1.1       deraadt   331: Same as above, but append the range of lines,
                    332: .Va YY
                    333: through
                    334: .Va ZZ
                    335: of
                    336: .Ar file2
                    337: to line
                    338: .Va XX
                    339: of file1.
1.2       deraadt   340: .It Li XX Ns Ic d Ns Li YY
1.1       deraadt   341: At line
                    342: .Va XX
                    343: delete
1.5       jmc       344: the line.
                    345: The value
1.1       deraadt   346: .Va YY
1.5       jmc       347: tells to which line the change would bring
1.1       deraadt   348: .Ar file1
                    349: in line with
                    350: .Ar file1 .
1.2       deraadt   351: .It Li XX,YY Ns Ic d Ns Li ZZ
1.1       deraadt   352: Delete the range of lines
                    353: .Va XX
                    354: through
                    355: .Va YY
                    356: in
                    357: .Ar file1 .
1.2       deraadt   358: .It Li XX Ns Ic c Ns Li YY
1.1       deraadt   359: Change the line
                    360: .Va XX
                    361: in
                    362: .Ar file1
                    363: to the line
                    364: .Va YY
                    365: in
1.5       jmc       366: .Ar file2 .
1.2       deraadt   367: .It Li XX,YY Ns Ic c Ns Li ZZ
1.1       deraadt   368: Replace the range of specified lines with the line
                    369: .Va ZZ .
1.2       deraadt   370: .It Li XX,YY Ns Ic c Ns Li ZZ,QQ
1.1       deraadt   371: Replace the range
1.2       deraadt   372: .Va XX , Ns YY
1.1       deraadt   373: from
                    374: .Ar file1
                    375: with the range
1.2       deraadt   376: .Va ZZ , Ns QQ
1.1       deraadt   377: from
                    378: .Ar file2 .
1.2       deraadt   379: .El
1.1       deraadt   380: .Pp
                    381: These lines resemble
                    382: .Xr ed 1
                    383: subcommands to convert
                    384: .Ar file1
                    385: into
                    386: .Ar file2 .
                    387: The line numbers before the action letters pertain to
                    388: .Ar file1 ;
                    389: those after pertain to
                    390: .Ar file2 .
                    391: Thus, by exchanging
                    392: .Ic a
                    393: for
                    394: .Ic d
                    395: and reading the line in reverse order, one can also
                    396: determine how to convert
                    397: .Ar file2
                    398: into
                    399: .Ar file1 .
                    400: As in
                    401: .Xr ed 1 ,
                    402: identical
                    403: pairs (where num1 = num2) are abbreviated as a single
                    404: number.
                    405: .Sh ENVIRONMENT
1.2       deraadt   406: .Bl -tag -width TMPDIR
                    407: .It Ev TMPDIR
1.1       deraadt   408: If the environment variable
                    409: .Ev TMPDIR
                    410: exists,
1.5       jmc       411: .Nm
1.2       deraadt   412: will use the directory specified by
1.1       deraadt   413: .Ev TMPDIR
1.2       deraadt   414: as the temporary directory.
                    415: .El
1.1       deraadt   416: .Sh FILES
1.17      millert   417: .Bl -tag -width /tmp/diff.XXXXXXXX -compact
                    418: .It Pa /tmp/diff.XXXXXXXX
                    419: Temporary file used when comparing a device or the standard input.
                    420: Note that the temporary file is unlinked as soon as it is created
                    421: so it will not show up in a directory listing.
1.2       deraadt   422: .El
1.1       deraadt   423: .Sh DIAGNOSTICS
                    424: The
1.5       jmc       425: .Nm
1.1       deraadt   426: utility exits with one of the following values:
1.2       deraadt   427: .Pp
                    428: .Bl -tag -width Ds -compact -offset indent
                    429: .It \&0
1.1       deraadt   430: No differences were found.
1.2       deraadt   431: .It \&1
1.1       deraadt   432: Differences were found.
1.5       jmc       433: .It \*[Gt]\&1
1.1       deraadt   434: An error occurred.
1.2       deraadt   435: .El
1.5       jmc       436: .Sh SEE ALSO
                    437: .Xr cmp 1 ,
                    438: .Xr comm 1 ,
                    439: .Xr diff3 1 ,
1.11      millert   440: .Xr ed 1 ,
1.14      millert   441: .Xr pr 1 ,
1.11      millert   442: .Xr fnmatch 3
1.15      millert   443: .Sh STANDARDS
                    444: The
                    445: .Nm
                    446: utility is expected to be a superset of the
1.24    ! jmc       447: .St -p1003.1-2001
1.15      millert   448: specification.
1.5       jmc       449: .Sh HISTORY
                    450: A
                    451: .Nm
                    452: command appeared in
                    453: .At v6 .
1.1       deraadt   454: .Sh BUGS
                    455: When comparing directories with the
                    456: .Fl b ,
                    457: .Fl w
                    458: or
                    459: .Fl i
                    460: options specified,
1.5       jmc       461: .Nm
1.1       deraadt   462: first compares the files ala
1.5       jmc       463: .Xr cmp 1 ,
1.1       deraadt   464: and then decides to run the
1.5       jmc       465: .Nm
1.1       deraadt   466: algorithm if they are not equal.
                    467: This may cause a small amount of spurious output if the files
                    468: then turn out to be identical because the only differences are
1.5       jmc       469: insignificant whitespace or case differences.