![Linux diff 命令,它会丢弃换行符吗?](https://linux22.com/image/144537/Linux%20diff%20%E5%91%BD%E4%BB%A4%EF%BC%8C%E5%AE%83%E4%BC%9A%E4%B8%A2%E5%BC%83%E6%8D%A2%E8%A1%8C%E7%AC%A6%E5%90%97%EF%BC%9F.png)
Linux 实现是否diff -w
丢弃\n
?我无法访问 Linux 机器来检查这一点。
答案1
旗帜-w
方法:
-w --ignore-all-space
Ignore all white space.
现在,这还不是很清楚,因为“空白”实际上通常包括\n
在内。例如,\s
Perl 兼容正则表达式或 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