Linux diff 命令,它会丢弃换行符吗?

Linux diff 命令,它会丢弃换行符吗?

Linux 实现是否diff -w丢弃\n?我无法访问 Linux 机器来检查这一点。

答案1

旗帜-w方法:

-w --ignore-all-space
    Ignore all white space.

现在,这还不是很清楚,因为“空白”实际上通常包括\n在内。例如,\sPerl 兼容正则表达式或 POSIX 中的类[[:space:]]都匹配换行符:

$ printf '\n' | grep -zqP '\s' && echo yes
yes
$ printf '\n' | grep -zq '[[:space:]]' && echo yes
yes

然而,diff通过比较来工作线和线条是由\n字符定义的(实际上也是如此grep,这就是我必须-z在上面使用的原因)。因此,diff不能\n考虑因为\n这是一条不同的线路。所以不,该-w选项不会导致diff丢弃换行符,空行意味着文件不匹配:

$ printf 'foo\nbar\n' > file1
$ printf 'foo\n\nbar\n' > file2
$ diff -wq  file1 file2
Files file1 and file2 differ

但是,有一个选项确实会diff忽略由于行数而引起的更改:

-B --ignore-blank-lines
    Ignore changes whose lines are all blank.

$ diff -sB  file1 file2
Files file1 and file2 are identical

相关内容