我有以下文件:
FILE1.TXT
###################################################
Dump stat Title information for 'ssummary' view
###################################################
Tab=> 'Instance' Title=> {text {Total instances: 7831}}
Tab=> 'Device' Title=> {text {Total spice devices: 256}}
Tab=> 'Memory' Title=> {text {Total memory allocated: 962192 kB}}
Tab=> 'Cpu' Title=> {text {Total cumulative CPU time: 9030 ms}}
FILE2.TXT
###################################################
Dump stat Title information for 'ssummary' view
###################################################
Tab=> 'Instance' Title=> {text {Total instances: 7831}}
Tab=> 'Device' Title=> {text {Total spice devices: 256}}
Tab=> 'Memory' Title=> {text {Total memory allocated: 9621932 kB}}
Tab=> 'Cpu' Title=> {text {Total cumulative CPU time: 90303 ms}}
而我运行以下命令:
diff -I 'Memory' file1.txt file2.txt
其输出:
6,7c6,7
< Tab=> 'Memory' Title=> {text {Total memory allocated: 962192 kB}}
< Tab=> 'Cpu' Title=> {text {Total cumulative CPU time: 9030 ms}}
---
> Tab=> 'Memory' Title=> {text {Total memory allocated: 9621932 kB}}
> Tab=> 'Cpu' Title=> {text {Total cumulative CPU time: 90303 ms}}
但是我的预期成果是:
< Tab=> 'Cpu' Title=> {text {Total cumulative CPU time: 9030 ms}}
---
> Tab=> 'Cpu' Title=> {text {Total cumulative CPU time: 90303 ms}}
需要注意的是在命令如果我改变“记忆”到“标签”或“标题”问题的解决,但可能是所有行会被忽略的原因,他们都有标签和标题。
这种行为看起来有点怪异确实如此。 我发现了一些通过调整你的输入文件(我刚搬来的“内存”行对两个文件的顶部):
FILE1.TXT
###################################################
Dump stat Title information for 'ssummary' view
###################################################
Tab=> 'Memory' Title=> {text {Total memory allocated: 962192 kB}}
Tab=> 'Instance' Title=> {text {Total instances: 7831}}
Tab=> 'Device' Title=> {text {Total spice devices: 256}}
Tab=> 'Cpu' Title=> {text {Total cumulative CPU time: 9030 ms}}
FILE2.TXT
###################################################
Dump stat Title information for 'ssummary' view
###################################################
Tab=> 'Memory' Title=> {text {Total memory allocated: 9621932 kB}}
Tab=> 'Instance' Title=> {text {Total instances: 7831}}
Tab=> 'Device' Title=> {text {Total spice devices: 256}}
Tab=> 'Cpu' Title=> {text {Total cumulative CPU time: 90303 ms}}
一个普通的差异会给你:
diff file1.txt file2.txt
4c4
< Tab=> 'Memory' Title=> {text {Total memory allocated: 962192 kB}}
---
> Tab=> 'Memory' Title=> {text {Total memory allocated: 9621932 kB}}
7c7
< Tab=> 'Cpu' Title=> {text {Total cumulative CPU time: 9030 ms}}
---
> Tab=> 'Cpu' Title=> {text {Total cumulative CPU time: 90303 ms}}
请注意,有两套不同......现在与安排, diff -I 'Memory' file1.txt file2.txt
命令将工作和输出这样的:
7c7
< Tab=> 'Cpu' Title=> {text {Total cumulative CPU time: 9030 ms}}
---
> Tab=> 'Cpu' Title=> {text {Total cumulative CPU time: 90303 ms}}
这意味着,在-I
标志似乎工作,只有当在一组差异每一行的表达式匹配 。 我不知道这是否是一个错误或预期的行为......但它肯定不一致。
编辑 :实际上,按照该GNU的diff文件 ,这是预期的行为。 该手册页不是那么清楚。 OpenBSD的差异有一个-I
标志太多,但他们的手册页解释了它更好。
这是正常现象给出的方式diff
作品(如2013年4月的)。
diff
是面向行的,这意味着一条线或者认为完全不同的或完全等效。 当行被忽略,它被输入到不同线路的名单比较之前,当更改脚本计算,只有忽略行所做的更改都认为自己是被忽略。 当忽略线相邻的改线,它构成了一个单一的非忽略的变化。
问题在于不能的diff
了解,连续的线都没有关系:你是不是比较文本序列(什么diff
的目的是),而这是有方向性的独立线路列表( Tab >= <key>
)。 当这两个文件以相同的顺序生成,但还是不一样的,这些问题看起来很相似。
那么你每天学习新的东西。 我也同样感到困惑,并通过这种行为,这似乎是大约受挫[DIFF输入文件,然后筛选出RE]而不是[筛选出RE输入文件,然后diff的。
我本来以为第二种方式更自然,更实用。 举例来说,这似乎是一路--ignore情况和--strip尾随-CR工作,版本比较之前调整输入文件。 此外,实际实现提问想要的东西包括过滤两个输入到临时文件,版本比较它们,然后删除它们。 如果你想做一个递归的差异和我一样变得更加繁琐。
我承认差异表现它的记录,而不是我怎么想它的行为方式,但恭敬地认为,此选项(和-b类似,-w太)可以有效地加入到差异。
这是预期行为按diffutils
手册:
然而, -I
仅忽略包含正则表达式,如果每个改变的线在大块 (每次插入和每次缺失) 的正则表达式匹配线的插入或缺失。
换言之, 对于每一个不可忽略的变化, diff
打印成套在其附近改变,包括那些忽略的 。 你可以指定一个以上的正则表达式的行通过使用一个以上的忽略-I
选项。 diff
尝试匹配针对每个正则表达式的每个线,从给定的最后一个。 ( 男人DIFF )
您可以尝试通过指定设置一组较小的变化-d
,但在你的例子,它不会工作。
-d --minimal
尽力去找到一组小的变化。
从人差异,如果我记得不错,-I会忽略它包含的REG进出口。 这意味着,如果F1是:
the pen is on the table
f2为:
the pun is on the table
将正确解析:
diff -I 'p.n' f2 f2
给什么
但
如果F2现在变成
the pun is on the cable
正则表达式不再被匹配(电缆和表不是由正则表达式匹配......)等ü将有两条线即将在输出...
所以,只要尝试改变命令:
diff -I '.*Memory.*' file1.txt file2.txt
应该做的伎俩(抱歉愚蠢的例子。)