仅显示带有差异的更改行,而不是新添加的行

时间:2013-01-03 07:43:22

标签: linux diff

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

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

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的参数获得此功能?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

尝试diff -U0,它应该只为你提供更改的行而没有更多的上下文。