Comparing multiple files can be a helpful task in Linux that we wish to automate. In this article, we are going to discuss the diff command that allows you to line-by-line compare two files and its options.
diff command in Linux
diff stands for the difference. diff is a command-line tool that allows you to line-by-line compare two files. It shows us where lines in one file need to be modified to make the two files identical, unlike its companion members cmp and comm. It can also compare directories' contents.
The most crucial thing to remember is that diff employs a set of special symbols and instructions to make two files similar. It explains how to edit the first file to make it match the second. The diff command is typically used to build a patch that contains the differences between one or more files and may be applied with the patch command. The syntax is:
diff [OPTION]... FILE1 FILE2…
Let's say we have two files with the names demo1.txt and demo2.txt containing some names of cities or states.
$ ls demo1.txt demo2.txt $ cat demo1.txt Gujarat Uttar Pradesh Kolkata Bihar Jammu and Kashmir $ cat demo2.txt Tamil Nadu Gujarat Andhra Pradesh Bihar Uttar pradesh
Now, applying the diff command without any option, we get the following output:
$ diff demo1.txt demo2.txt 0a1 > Tamil Nadu 2,3c3 < Uttar Pradesh Andhra Pradesh 5c5 Uttar pradesh
The output of the command will contain the following things that we need to understand:
- Line numbers corresponding to the first file,
- Line numbers corresponding to the second file.
- Lines beginning with < are from the first file.
- Lines beginning with > are from the second file.
- The three dashes ("—") are just separators between the lines of files 1 and 2.
- There are three special symbols in the output of the command. These symbols indicate how the first file needs to be edited to match the second file. The output will display either of the following:
- a (add)
- c (change)
- d (delete)
Options with the diff command
1. -c (context)
Use the -c option to see differences in context mode.
$ cat demo1.txt cat mv comm cp $ cat demo2.txt cat cp diff comm $ diff -c demo1.txt demo2.txt *** demo1.txt Thu Jan 11 08:52:37 2018 --- demo2.txt Thu Jan 11 08:53:01 2018 *************** *** 1,4 **** cat - mv - comm cp --- 1,4 ---- cat cp + diff + comm
2. -u (unified)
Use the -u option to display differences in unified mode. It's similar to context mode, except it doesn't reveal any superfluous information and presents data in a succinct manner.
$ cat demo1.txt cat mv comm cp $ cat demo2.txt cat cp diff comm $ diff -u demo1.txt demo2.txt --- file1.txt 2018-01-11 10:39:38.237464052 +0000 +++ file2.txt 2018-01-11 10:40:00.323423021 +0000 @@ -1,4 +1,4 @@ cat -mv -comm cp +diff +comm
This command is case-sensitive by default. Use the -i option with diff to make this command case insensitive.
$ cat demo1.txt dog mv CP comm $ cat demo2.txt DOG cp diff comm
Without using this option:
$ diff demo1.txt demo2.txt 1,3c1,3 < dog < mv DOG > cp > diff Using this option: $ diff -i demo1.txt demo2.txt 2d1 diff
This option is used to show the diff version that is presently executing on your system.
$ diff --version diff (GNU diffutils) 3.5 Packaged by Cygwin (3.5-2) Copyright (C) 2016 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later . This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law.
This command displays the various options and helps related to the diff command.
In this article, we talked about the diff command and its options which are used to see differences in context mode, to display differences in unified mode, to make this command case insensitive, and to show the diff version that is presently executing on your system.
People are also reading :