使 `diff` 命令只查找指定范围内的行的差异

JAT*_*T86 5 command-line diff

有没有一种方法,使diff命令看才从指定的行范围(从差异线线),整个文件的呢?我在试图找出不在同一行的两个文件中的两个 JavaScript 函数之间的区别时遇到了困难。我可以将行范围复制到一个新文件中,对另一个文件执行相同操作,然后比较它们,但是这样做会很乏味,尤其是因为文件包含大量文本。

我尝试使用:

diff "code1.js" "code2.js" --suppress-common-lines | tee outputFile
Run Code Online (Sandbox Code Playgroud)

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

Rin*_*ind 11

diff <(sed -n 'S1,S2p' file1) <(sed -n 'S3,S4p' file2)
Run Code Online (Sandbox Code Playgroud)

在哪里

  • S1 是起始行文件 1。
  • S2 是结束行文件 1。
  • S3 是起始行 file2。
  • S4 是结束行 file2。

跳过第 1-4 行:

diff <(sed -n '5,10p' file1) <(sed -n '5,10p' file2)
Run Code Online (Sandbox Code Playgroud)
$ more file1
1
2
3
4
5
6
7
8
9
10

$ more file2
11
2
3
4
5
65
7
8
9
10
Run Code Online (Sandbox Code Playgroud)

结果

2c2
< 6
---
> 65
Run Code Online (Sandbox Code Playgroud)

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

为此使用桌面工具可能更容易。Meld很棒(关于 AU 的话题:https : //askubuntu.com/a/2947/15811):

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