目录中有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脚本吗?
答案 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。