Imagine you have two files that have minor differences in them.
It might be difficult to spot the differences between them.
Thankfully, there is a command called diff that will help us out.
diff --help Usage: diff [OPTION]... FILES Compare files line by line.
But first, we need some files with a couple of differences in them.
We can use the sed command to slightly change one of the random files.
sed -e 's/^baz;/bay;/g' strandberg.txt > strandberg.diff.txt
Now that we a file with a few differences, you can use the diff command to see them.
diff strandberg.txt strandberg.diff.txt 3c3 < baz; Bar! Foo? Hoo? Baz. Foo bar, Foo Foo Baz! Foo bar, baz. Bar. Foo; --- > bay; Bar! Foo? Hoo? Baz. Foo bar, Foo Foo Baz! Foo bar, baz. Bar. Foo;
The diff command will list every difference between the two files. The first file passed is the left file, and the second file is the right file.
For each part of the file that is different, you will see the location and the difference.
The location is displayed as “3c3”, line 3 of the left file and line 3 of the right file.
Then there are the actual differences.
The left hand file line is show with the less than symbol (
<) and the right hand is shown with the greater than symbol (
In the world of programming, diff is very useful. It allows you to see the changes between one version of a file and another. However, in a lot of programming languages, the whitespace doesn’t have any effect of the programme. Which is good because some people like to code using spaces and others like to use tabs.
What we need is to modify our previous example to change the white-space.
sed -e 's/^baz;/bay;/g' -e 's/ / /g' strandberg.txt > strandberg.diff.txt
Note: It might not be obvious, but the last sed command is to replace a single space with two spaces.
If we compare the files now, every line will have issues, because of the white-space change we made.
diff strandberg.txt strandberg.diff.txt 1,6c1,6 < Foo? Hoo? Baz. Foo bar, Foo Foo Baz! Foo bar, baz? Bar? Foo! Hoo? < Foo Foo Baz. Foo bar, baz. Bar; Foo. Hoo! Baz! Foo bar, Foo Foo Baz! < baz; Bar! Foo? Hoo? Baz. Foo bar, Foo Foo Baz! Foo bar, baz. Bar. Foo; --- > Foo? Hoo? Baz. Foo bar, Foo Foo Baz! Foo bar, baz? Bar? Foo! Hoo? > Foo Foo Baz. Foo bar, baz. Bar; Foo. Hoo! Baz! Foo bar, Foo Foo Baz! > bay; Bar! Foo? Hoo? Baz. Foo bar, Foo Foo Baz! Foo bar, baz. Bar. Foo;
Note: When the location has a comma, e.g. 1,6c2,3, then that is start line and end line.
To get diff to compare just the text changes and ignore the white-space change, you need to use the -w option.
diff -w strandberg.txt strandberg.diff.txt 3c3 < baz; Bar! Foo? Hoo? Baz. Foo bar, Foo Foo Baz! Foo bar, baz. Bar. Foo; Hoo! Baz! --- > bay; Bar! Foo? Hoo? Baz. Foo bar, Foo Foo Baz! Foo bar, baz. Bar. Foo; Hoo! Baz!
diff command is an invaluable tool in the Unix-like operating systems, being a linchpin for comparing file differences. With its ability to meticulously dissect and display changes between files,
diff has become an essential command for developers, system administrators, and everyday users alike.
Whether you’re comparing simple text files or analyzing changes between intricate code files,
diff offers you an efficient way to pinpoint additions, deletions, and modifications. Furthermore, with its output formats like the unified format or the context format,
diff provides flexible ways to visualize these changes, catering to various user preferences and needs.
Additionally, the power of
diff is not only confined to comparing two files. When used with other commands like
patch, it can create and apply patches — a feature that has become a cornerstone in version control systems, leading to efficient collaborative coding environments.
However, the full depth of
diff extends far beyond what we’ve explored in this guide. This command is vast, offering a variety of flags and options that can cater to more specific use cases and preferences. For instance, the
--ignore-all-space options can add even more flexibility to your file comparisons.
In essence, mastering the
diff command allows you to navigate file changes with confidence and precision, whether you’re reconciling different code versions, comparing configuration files, or simply checking for alterations in text documents. Remember, you can always explore the
man diff or
diff --help commands to unlock even more of its potential.