Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using 'diff' (or anything else) to get character-level diff between text files

I'd like to use 'diff' to get a both line difference between and character difference. For example, consider:

File 1

abcde abc abcccd 

File 2

abcde ab abccc 

Using diff -u I get:

@@ -1,3 +1,3 @@  abcde -abc -abcccd \ No newline at end of file +ab +abccc \ No newline at end of file 

However, it only shows me that were changes in these lines. What I'd like to see is something like:

@@ -1,3 +1,3 @@  abcde -ab<ins>c</ins> -abccc<ins>d</ins> \ No newline at end of file +ab +abccc \ No newline at end of file 

You get my drift.

Now, I know I can use other engines to mark/check the difference on a specific line. But I'd rather use one tool that does all of it.

like image 449
VitalyB Avatar asked Nov 12 '09 12:11

VitalyB


People also ask

How do I compare the contents of two files in Linux?

The Linux diff command is used to compare two files line by line and display the difference between them. This command-line utility lists changes you need to apply to make the files identical.


2 Answers

Git has a word diff, and defining all characters as words effectively gives you a character diff. However, newline changes are ignored.

Example

Create a repository like this:

mkdir chardifftest cd chardifftest git init echo -e 'foobarbaz\ncatdog\nfox' > file git add -A; git commit -m 1 echo -e 'fuobArbas\ncat\ndogfox' > file git add -A; git commit -m 2 

Now, do git diff --word-diff=color --word-diff-regex=. master^ master and you'll get:

git diff

Note how both additions and deletions are recognized at the character level, while both additions and deletions of newlines are ignored.

You may also want to try one of these:

git diff --word-diff=plain --word-diff-regex=. master^ master git diff --word-diff=porcelain --word-diff-regex=. master^ master 
like image 89
senf78 Avatar answered Sep 18 '22 09:09

senf78


You can use:

diff -u f1 f2 |colordiff |diff-highlight 

screenshot

colordiff is a Ubuntu package. You can install it using sudo apt-get install colordiff.

diff-highlight is from git (since version 2.9). It is located in /usr/share/doc/git/contrib/diff-highlight/diff-highlight. You can put it somewhere in your $PATH.

like image 28
zhanxw Avatar answered Sep 19 '22 09:09

zhanxw