#!/usr/bin/perl use File::Temp qw/ :mktemp /; sub usage() { print "cat diff | transform.pl old new old new old new...\n"; die; } my @subs; sub filter($) { my $line = shift(); foreach my $sub (@subs) { $line =~ s/$sub->[0]/$sub->[1]/g; } # white space at the end of lines $line =~ s/ *$//g; $line =~ s/\t*$//g; # remove the first char $line =~ s/^[ +-]//; # tabs to spaces $line =~ s/\ {8}/\t/g; return $line; } ($oldfh, $oldfile) = mkstemp("/tmp/oldXXXXX"); ($newfh, $newfile) = mkstemp("/tmp/newXXXXX"); while (my $param1 = shift()) { my $param2 = shift; if ($param2 =~ /^$/) { usage(); } push @subs, [$param1, $param2]; } while (<>) { my $line = $_; if ($line =~ /^---/) { next; } if ($line =~ /^\+\+\+/) { next; } my $output = filter($line); if ($line =~ /^-/) { print $oldfh $output; next; } if ($line =~ /^\+/) { print $newfh $output; next; } print $oldfh $output; print $newfh $output; } system("diff -u $oldfile $newfile"); unlink($oldfile); unlink($newfile);