2

我很好奇是否有办法只使用 diff 获取更改的行,而不是新添加的行?

我的意思是,假设我有两个文件 file1 和 file2。

文件 1 是:

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

文件2是:

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 回答
1

试试 diff -U0,它应该只给你更改的行而没有进一步的上下文。

于 2014-01-07T14:26:47.683 回答