如何在shell脚本中找到2个文件之间的区别

时间:2010-07-14 08:53:37

标签: bash shell

目录中有100个文件,有2对文件。

我想找到shell脚本中的2个文件之间的区别

File 1: 
Operating System : Windows XP
Operating System : Windows NT
Operating System : Windows 2008

FILE 2: 
Windows XP
Windows NT
Windows2008

(例如Windows 2008(文件1)和Windows2008(文件2))。

但最后两个文件没有任何区别。

如何实现这一目标?

这些文件在linux主机上并想做shell脚本吗?

4 个答案:

答案 0 :(得分:2)

让我们使用Perl和diff,好吗? cut并不能完成这项工作。为了忠实于你的原始评论,我将在每行输入中寻找'Widnows'之后的单词,并创建一个仅由这些单词组成的新文件。然后我要分散文件。

每次我发布Perl,每次,我都有一群StackOverflowers批评它。所以,为一些糟糕的Perl做好准备。它可能会奏效。我的名声可以得到帮助,我真的希望在这里有所帮助。

首先,Perl脚本(称之为preparse.pl):

my $f = shift @ARGV;
open FILE, "<$f" or die("Couldn't open file!");
while (<FILE>) {
    print "$1\n" if $_ =~ /Widnows(\s?)*?(\S+)\s*/;
}

现在,您运行的命令:

preparse.pl file1 > file1.tmp
preparse.pl file2 > file2.tmp
diff file1.tmp file2.tmp

随意制作一个大的Perl脚本。不管。

答案 1 :(得分:2)

diff实用程序位于大多数系统上,-u统一输出最受欢迎。

$ diff -u file1 file2
--- file1   2010-07-14 02:08:20.000000000 -0700
+++ file2   2010-07-14 02:08:29.000000000 -0700
@@ -1,3 +1,3 @@
-Operating System : Windows XP
-Operating System : Windows NT
-Operating System : Windows 2008
+Windows XP
+Windows NT
+Windows2008

如果你想要一个逐字的差异,你可以使用不太常见的工具,如wdiff

$ wdiff file1 file2
[-Operating System :-]Windows XP
[-Operating System :-]
Windows NT
[-Operating System : Windows 2008-]
{+Windows2008+}

如果您想要更直观地了解两个文件中的差异,可以使用xxdiff等工具或  kdiff3或类似的。 (有三个合并图形差异工具的很多。)

如果您想要以编程方式更容易使用的东西,cmp程序可以列出所有字节差异 文件中的文字:

$ cmp -l file1 file2
 1 117 127
 2 160 151
 3 145 156
...

cmp对于几乎完全相同的文件可能更有用。

答案 2 :(得分:1)

这个问题太不精确了,但试试这个:

diff <(sed 's/Operating System : //' file1.txt) file2.txt

答案 3 :(得分:1)

如果您要将3个文件相互比较或者使用vimdiff,我会使用diff,diff3。