给定两个文件,如何找到行更改的总数?

Jon*_*ant 1 command-line grep diff wc

我尝试使用此命令来计算两个文件之间更改的行数:

diff -U 0 file1 file2 | grep ^@ | wc -l
Run Code Online (Sandbox Code Playgroud)

我对这个命令的问题是,如果一个文件只有一行,而另一个文件有 100 行,输出仍然只有 1。

什么命令可以给我更改的总行数,包括一个文件中的总行数?

ilk*_*chu 5

查找以 开头的行@会为您提供diff找到的更改块的数量。它们通常不止一行。

碰巧,有以计数差异的统计工具:diffstat网站手册页)。

计数插入和删除:

$ diff -u test1 test2 | diffstat
 test2 |    3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)
Run Code Online (Sandbox Code Playgroud)

将同一块中的插入和删除合并为单个“修改”操作:

$ diff -u test1 test2 | diffstat -m
 test2 |    2 -!
 1 file changed, 1 deletion(-), 1 modification(!)
Run Code Online (Sandbox Code Playgroud)

此外,您可以使用diffstat -t仅获取修改行数的表格输出。

测试文件:

$ cat test1
a
b
c
d
$ cat test2
a
x
d
Run Code Online (Sandbox Code Playgroud)