35

I have file a and b and I would like to output lines of b that changed since it was cloned from a. Just the modified lines, no surrounding context, no diff offset marks.

How can I do that using shell scripting? (No Python/Perl/PHP/...)

Sed and awk are acceptable solutions.

For now, what I am doing is diff -y with --suppress-common-lines and sed using regex backreferences to just fetch the right part after the whitespace. There must be a better way?

Using perl (which is forbidden), I´d do something like this:

diff -y --suppress-common-lines -W $COLUMNS Eclipse_Preferences_Export_*.epf | perl -pe 's/.*\t|\t(.*)$/\1/g'
Robottinosino
  • 5,271
  • 12
  • 39
  • 51

3 Answers3

51

With GNU diffutils package's diff this will output only lines from file b which either were modified or newly inserted:

diff --unchanged-line-format= --old-line-format= --new-line-format='%L' a b
manatwork
  • 30,549
  • 7
  • 101
  • 91
6

You have to add one more option :

grep -vf file1 file2
Nidal
  • 8,856
  • 11
  • 55
  • 74
Sri
  • 69
  • 1
  • 1
4
awk 'FNR==NR{old[$0];next};!($0 in old)' old.txt new.txt
1kenthomas
  • 233
  • 2
  • 5