2

如何让 GNU diff 忽略以下示例中的空行?

文件一:

x
do

done

文件 b:

x

do
done

两个文件的任何行都没有尾随空格。

在 Mac OS XI 上使用 GNU diff 3.1 得到:

diff -w a b
2d1
< do
3a3
> do

当我添加各种有希望的选项时也是如此:

diff --suppress-blank-empty -E -b -w -B -I '^[[:space:]]*$' --strip-trailing-cr -i a b
2d1
< do
3a3
> do

我在这里想念什么?

diff --version
diff (GNU diffutils) 3.1
4

1 回答 1

1

我认为这里的问题是 diff 被do视为从第一个文件中删除,并添加到第二个文件中,可能是因为更改周围没有足够的上下文。

如果您将文件的顺序颠倒为参数,则 diff 会报告该空间已添加和删除,然后将使用--ignore-blanks-lines.

把它看成一个统一的差异,这更清楚一点:

$ diff test.txt test2.txt -u
--- test.txt    2015-10-20 10:50:52.585167600 -0700
+++ test2.txt   2015-10-20 10:51:01.042167600 -0700
@@ -1,4 +1,4 @@
 x
-do

+do
 done

prp@QW7PRP09-14 ~/temp
$ diff test2.txt test.txt -u
--- test2.txt   2015-10-20 10:51:01.042167600 -0700
+++ test.txt    2015-10-20 10:50:52.585167600 -0700
@@ -1,4 +1,4 @@
 x
-
 do
+
 done

以及 --ignore-blank-lines 的结果,并且顺序切换:

prp@QW7PRP09-14 ~/temp
$ diff test2.txt test.txt -B -u
于 2015-10-20T18:05:46.013 回答