在Windows中的两个文件上执行差异时,在两个文件中获取差异的行数

StackOverflow https://stackoverflow.com/questions/4139083

  •  30-09-2019
  •  | 
  •  

为了进行代码审核的目的,在修改了现有源文件后,我们仅查看这些源文件中已更改的代码行。
在存储库中更改源文件后,我必须在进行PEER代码评论之前传达在源文件中更改的代码行。

我能够使用Winmerge看到视觉差异,并且对它对我的作用感到满意,但是我同事的唯一要求就是仅仅知道文件名和需要审查的行号。

有没有办法仅获取更改文件的行号?文件的类型将是文本源文件,例如JavaScript,Java,XML,XSL等。

示例文件 -

foo(新版本):

a
b
c
d
e
f
g
h
i
j
k

foo(旧版本):

a
b
C
d
h
i
k

我正在寻找的输出:

foo: 3, 5-7, 10-11

或者

foo:
3
5-7
10-11

我确定某些程序允许这样做。我只是找不到一个。有什么建议么?我目前正在使用Winmerge,但是在Windows上运行的任何程序都对我来说都很好。如果软件是开源或免费软件,则最好。

编辑:GNU Diffutils接近我想要的,但不完全适合我的需求。看着命令行选项,我将“ -Q”(或“ - brief”)视为简化的差异,但太简单了。输出:

C:\Program Files\GnuWin32\bin>diff.exe -q foo1.txt foo2.txt
Files foo1.txt and foo2.txt differ

正常的差异输出:

C:\Program Files\GnuWin32\bin>diff.exe foo1.txt foo2.txt
3c3
<     c
---
>     C
5,7d4
<     e
<     f
<     g
10,11c7
<     j
<     k
---
>     k
\ No newline at end of file

diff -U输出:

C:\Program Files\GnuWin32\bin>diff.exe -u foo1.txt foo2.txt
--- foo1.txt    2010-11-09 15:47:12.447916000 -0600
+++ foo2.txt    2010-11-09 15:47:36.129954700 -0600
@@ -1,11 +1,7 @@
     a
     b
-    c
+    C
     d
-    e
-    f
-    g
     h
     i
-    j
-    k
+    k
\ No newline at end of file

我正在寻找比diff -q更有益的东西,但内容不如diff -u和diff。那里有任何差异的忍者,他们知道允许这一点的不同选择吗?

我将始终将一个新的,最近修改的文件与旧文件进行比较。我只需要需要在新文件上查看的内容。

有帮助吗?

解决方案

gnu diffutils是开源的,免费,并且具有 Windows端口.

其他提示

将第一个文件保存为x.txt,第二个文件作为y.txt

然后运行:

diff -i-inchanged-line-format =“¥” - new-line-format =“:%dn:%l” y.txt x.txt | perl -pe's/¥/ n/g'| perl -pe' $ count ++; if($ _!〜 /^ n $ /){打印“ $ count t”;}'

不知道Windows本地方法,但我使用TextPad的“比较文件”功能为此,非常好。

Windows本地。我们的 SD智能差异者 生产三角洲不是在线上而是在程序结构上产生三角洲,并且对于行/列线/列以及编辑的程序实体的类型是精确的。它通过解析源文本并使用代码结构来驱动比较来进行比较。根据程序员感兴趣的行为描述了三角洲:插入,替换,删除,替代。

这是一个例子:

Java~Java1_5 SmartDifferencer Version 1.1.1
Copyright (C) 2009 Semantic Designs, Inc; All Rights Reserved; SD Confidential
Powered by DMS (R) Software Reengineering Toolkit
*** Parsing file C:/DMS/Domains/Java/Java1_5/Analyzers/SmartDifferencer/Tests/diff1_before.java ...
*** Parsing file C:/DMS/Domains/Java/Java1_5/Analyzers/SmartDifferencer/Tests/diff1_after.java ...
*** Creating suffix tree ...
*** Determining maximal pairs ...
*** Sorting maximal pairs ...
*** Determining differences ...
*** Printing edits ...
a12.5 I s12.5-12.57:field_declaration
a179.9 I s185.9-185.71:executable_statement
a193.5 I s201.9-203.9:executable_statement
a272.13 I t279.13-280.33f267.13-268.30[267.17'lineNum'~>279.17'endLineNum',268.17'columnNum'~>280.17'endColumnNum']:statement_sequence_member,statement_sequence_member
a340.68 I s352.68-352.68:',' s352.70-352.70:INTEGER s352.71-352.71:',' s352.73-352.73:INTEGER
a423.13 I t436.13-509.38f450.17-518.35[482.17'hlevel'~>468.13'endLineNum',518.17'hname'~>509.13'endColumnNum']:executable_statement,executable_statement,executable_statement,executable_statement,executable_statement,executable_statement,executable_statement,executable_statement,executable_statement,executable_statement,executable_statement,executable_statement
a423.84 I s513.84-513.84:',' s513.86-513.95:IDENTIFIER s513.96-513.96:',' s513.98-513.109:IDENTIFIER
s424.13-424.59:expression_statement S s514.25-514.47:expression_statement
s429.13-429.64:local_variable_declaration S s515.25-515.87:local_variable_declaration
s430.13-430.71:executable_statement f431.13-431.69[431.13'lineString'~>79.9'config',431.26'lineString'~>79.18'config',431.47'indexOfSpace'~>79.35'end_index']t79.9-79.56:executable_statement s432.13-432.51:executable_statement D a516.25
a433.13 I s516.25-519.25:executable_statement n433.13-439.13:executable_statement s433.13-433.14:'if' s433.16-433.16:'(' s433.17-433.30:relational_expression s433.31-433.31:')' s433.33-433.45:executable_statement s434.13-434.16:'else' n434.18-439.13:block s434.18-434.18:'{' n435.17-438.49:statement_sequence f435.17-435.71[435.17'lineString'~>79.9'config',435.28'lineString'~>79.18'config',435.49'indexOfSpace'~>79.35'end_index']t79.9-79.56:executable_statement s436.17-436.28:executable_statement s437.17-437.51:executable_statement s438.17-438.49:executable_statement s439.13-439.13:'}' D a516.25
a442.13 I s520.25-520.54:executable_statement

高级编辑动作是“ i”,“ s”,“ r”和“ d”,有关添加,插入或删除的详细信息在I/s/s/r/d字符的左侧或右侧,带有行.Column Precision。例如,在第12行第5行中,在第5列到第57列的第12行中进行了“ I” nseration。标识符亚麻替代了Endlinenum。在第二个文件中的第424行中,最初是由第514行的“ ubstit”的“ s”。网站上的更多详细信息。

如果您想与Perl这样的东西,则可以轻松地剥离额外的细节(以下内容:“字符和内部[])。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top