2

新しく追加された行ではなく、変更された行のみを diff で取得する方法があるかどうか興味がありますか?

つまり、file1 と file2 という 2 つのファイルがあるとします。

file1 は次のとおりです。

abc=123
def=234
klm=10.10
xyz=6666

file2 は次のとおりです。

abc+=123
def=234
klm=10.101
xyz=666
stackoverflow=1000
superuser=2000
wtf=911

私が欲しいのは、次のようなコマンドを与えて、次のようなdiff <parameters> file1 file2出力を得ることです

- abc=123
+ abc+=123
- klm=10.10
+ klm=10.101
- xyz=6666
+ xyz=666

そのような出力も歓迎されます:

- abc=123
+ abc+=123
  def=234
- klm=10.10
+ klm=10.101
- xyz=6666
+ xyz=666

私はしたくない

stackoverflow=1000
superuser=2000
wtf=911

行が出力されます。

Linux で diff のパラメーターを使用してこの機能を取得する方法はありますか?

4

2 に答える 2

1

簡単な Perl スクリプト:

use strict;
use warnings;

my ($fname1, $fname2) = ($ARGV[0], $ARGV[1]);

my %conf;
open (my $input1, "<", "$fname1") or die("open $fname1: $!");
while (<$input1>) { 
  chomp; 
  my @v = split(/\+?=/);
  $conf{$v[0]}=$_; 
}
close $input1;

open (my $input2, "<", "$fname2") or die("open $fname2: $!");
while (<$input2>) {
  chomp;
  my @v = split(/\+?=/);
  if (defined ($conf{$v[0]}) && $_ ne $conf{$v[0]}) {
    print "- $conf{$v[0]}\n";
    print "+ $_\n";
  }
}
close $input2;

出力

- abc=123
+ abc+=123
- klm=10.10
+ klm=10.101
- xyz=6666
+ xyz=666
于 2013-01-03T07:59:33.000 に答える