>diff_
The
For example let's say we have two files, file1.txt and file2.txt.
If file1.txt contains the following four lines of text: and file2.txt contains these four lines: then we can use diff to automatically display for us which lines differ between the two files with this command:
The line "***************" is just a separator.
The next line has three asterisks ("***") followed by a line range from the first file (in this case lines 1 through 4, separated by a comma). Then four asterisks ("****").
Then it shows us the contents of those lines. If the line is unchanged, it's prefixed by two spaces. If the line is changed, however, it's prefixed by an indicative character and a space. The character meanings are as follows:
After the lines from the first file, there are three dashes ("---"),
then a line range, then four dashes ("----"). This indicates the
line range in the second file that will sync up with our changes
in the first file.
If there is more than one section that needs to change, diff will
show these sections one after the other. Lines from the first file will
still be indicated with "***", and lines from the second file
with "---".
diff
command analyzes two files and prints the lines that are different.
Essentially, it outputs a set of instructions for how to change one file to
make it identical to the second file.How to use
To activate the diff command, we must take as parameters two or more files that we want to compare and it will give us the output of different lines.For example let's say we have two files, file1.txt and file2.txt.
If file1.txt contains the following four lines of text: and file2.txt contains these four lines: then we can use diff to automatically display for us which lines differ between the two files with this command:
diff file1.txt file2.txtand the output will be:
2,4c2,4 < I need to run the laundry. < I need to wash the dog. < I need to get the car detailed. --- > I need to do the laundry. > I need to wash the car. > I need to get the dog detailed.In our output, "2,4c2,4" means: "Lines 2 through 4 in the first file need to be changed to match lines 2 through 4 in the second file.
Context mode
To view differences in context mode, use the -c option. For instance, let's say file1.txt and file2.txt contain the following:File1.txt | File2.txt |
---|---|
apples | apples |
oranges | kiwis |
kiwis | carrots |
carrots | grapefruits |
diff -c file1.txt file2.txtOur output will be like the following:
*** file1.txt 2014-08-21 17:58:29.764656635 -0400 --- file2.txt 2014-08-21 17:58:50.768989841 -0400 *************** *** 1,4 **** apples - oranges kiwis carrots --- 1,4 ---- apples kiwis carrots + grapefruitsThe first two lines of this output show us information about our "from" file (file 1) and our "to" file (file 2). It lists the file name, modification date, and modification time of each of our files, one per line. The "from" file is indicated by "***", and the "to" file is indicated by "---"..
The line "***************" is just a separator.
The next line has three asterisks ("***") followed by a line range from the first file (in this case lines 1 through 4, separated by a comma). Then four asterisks ("****").
Then it shows us the contents of those lines. If the line is unchanged, it's prefixed by two spaces. If the line is changed, however, it's prefixed by an indicative character and a space. The character meanings are as follows:
Character | Meaning |
---|---|
! | Indicates that this line is part of a group of one or more lines that needs to change. There is a corresponding group of lines prefixed with "!" in the other file's context as well. |
+ | Indicates a line in the second file that needs to be added to the first file. |
- | Indicates a line in the first file that needs to be deleted. |
Unified mode
Unified mode (the -u option) is similar to context mode, but it doesn't display any redundant information. Here's an example, using the same input files as our last example:diff -u file1.txt file2.txtwill output:
--- file1.txt 2014-08-21 17:58:29.764656635 -0400 +++ file2.txt 2014-08-21 17:58:50.768989841 -0400 @@ -1,4 +1,4 @@ apples -oranges kiwis carrots +grapefruitsThe output is similar to above, but as you can see, the differences are "unified" into one set.