使“diff”命令仅查找指定范围内的行之间的差异

使“diff”命令仅查找指定范围内的行之间的差异

有没有办法让diff命令只查找指定范围内的行之间的差异(从行至行)而不是整个文件?我很难找到两个文件中不在同一行的两个 JavaScript 函数之间的差异。我可以将行范围复制到一个新文件中,对另一个文件执行相同操作,然后比较它们,但这样做会很繁琐,尤其是因为文件包含大量文本。

我尝试使用:

diff "code1.js" "code2.js" --suppress-common-lines | tee outputFile

但显然它不会只显示我感兴趣的行范围。如果我可以指定在一个文件中查找的行范围和在另一个文件中查找的不同行范围,那也会很有用。

答案1

diff <(sed -n 'S1,S2p' file1) <(sed -n 'S3,S4p' file2)

在哪里

  • S1 是 file1 的起始行。
  • S2 是 file1 的结束行。
  • S3 是 file2 的起始行。
  • S4 是 file2 的结束行。

跳过第 1-4 行:

diff <(sed -n '5,10p' file1) <(sed -n '5,10p' file2)

$ more file1
1
2
3
4
5
6
7
8
9
10

$ more file2
11
2
3
4
5
65
7
8
9
10

结果

2c2
< 6
---
> 65

-> 它跳过了第 1 行的差异。

对此,使用桌面工具可能会更容易。融合非常好(AU 上的话题:https://askubuntu.com/a/2947/15811):

Meld 是一款面向开发人员的可视化比较和合并工具。Meld 可帮助您比较文件、目录和版本控制项目。它提供文件和目录的双向和三向比较,并支持许多流行的版本控制系统。

相关内容