Linux 如何区分同一文件的两个部分?

Linux 如何区分同一文件的两个部分?,linux,language-agnostic,diff,Linux,Language Agnostic,Diff,我有一个源文件,其中有两个相似但细微不同的部分。我想将这两个部分合并成一个子例程,其中包含一个处理细微差异的参数,但我需要确保我知道所有这些,这样我就不会遗漏任何内容。 在这种情况下,我通常会将每个部分复制到一个单独的文件中,然后使用tkdiff或vimdiff突出显示差异。有没有办法跳过中间文件,只区分同一文件的两部分?我使用。 它允许您在每一侧选择一条线并说“手动对齐”。这对您来说应该很好。如果您可以描述要与正则表达式组合的部分的开始和结束,您可以使用以下内容: sh -c 't=`mkte

我有一个源文件,其中有两个相似但细微不同的部分。我想将这两个部分合并成一个子例程,其中包含一个处理细微差异的参数,但我需要确保我知道所有这些,这样我就不会遗漏任何内容。 在这种情况下,我通常会将每个部分复制到一个单独的文件中,然后使用tkdiff或vimdiff突出显示差异。有没有办法跳过中间文件,只区分同一文件的两部分?

我使用。
它允许您在每一侧选择一条线并说“手动对齐”。这对您来说应该很好。

如果您可以描述要与正则表达式组合的部分的开始和结束,您可以使用以下内容:

sh -c 't=`mktemp`; cat "$0" | grep -e "$2" -A10000 | grep -e "$3" -B 10000 > $t; cat "$1" | grep -e "$2" -A10000 | grep -e "$3" -B 10000 | diff -u $t - ; rm $t' firstfile secondfile "section start" "section end"
作为替代方案,如果您想按行号描述该节,您可以执行以下操作:

sh -c 't=`mktemp`; cat "$0" | head -$3 |tail +$2 > $t; cat "$1" | head -$5 | tail +$4 | diff -u $t - ; rm $t' first second 4 10 2 8

4 10 2 2是从第一个文件和第二个文件考虑的部分的开始和结束行编号。 您可以将代码段保存为shell脚本,也可以将其保存为别名

是开源的,可在包括Win32和Linux在内的多个平台上使用

它有Gishu讨论过的手动对齐功能,顺便说一句,我没有亲自使用过,但我认识的很多人认为它是一个很棒的工具


有关更多示例,请参见。

任何允许您手动调整对齐方式的diff工具都可以完成此工作。漫反射是我最喜欢的,它还允许您手动调整对齐方式。

我选择将@Ordnugswidrig的答案重新修改为bash函数。我只对单个文件的差异感兴趣,但这可以很容易地更改为处理两个不同的文件…:

# find differences within a file giving start and end lines for both sections function diff_sections { local fname=`basename $1`; local tempfile=`mktemp -t $fname`; head -$3 $1 | tail +$2 > $tempfile && head -$5 $1 | tail +$4 | diff -u $tempfile - ; rm $tempfile; } 你这样调用函数。。。 diff_sections path/to/file 464 483 485 506

Vim插件对我来说运行良好。直观地选择文件的一个部分并键入:Linediff。目视选择其他截面和类型:Linediff。它将使vim进入模式,仅显示您之前突出显示的两个部分。类型:LinediffReset以退出vimdiff模式

更多信息:


Emacs为此提供了一个缓冲区—您可以选择两个缓冲区或一个缓冲区,然后在每个缓冲区中选择一个区域,然后ediff将显示该区域以进行比较。

谢谢!我通常在Linux中工作,但可以使用Samba从windows机器访问NFS上的文件。我试试看。有没有Linux自带的工具可以做同样的事情呢?通过谷歌搜索,BCV3似乎可以用于Linux。正如有人发布的BC值得启动一个windows box for:Align manually可以很好地工作,如果节足够近的话,但是我发现有时让它不匹配那一行,然后跳过巨大的文本节来重新对齐文件本身,这可能会很乏味。但是,它不需要明确的文件,您可以使用ctrl-shift-v复制并粘贴到新的文本比较选项卡中。BC是迄今为止我使用过的最好的文件差异化工具。第二个工具不起作用。。你不能那样尾随。。需要a-ndiff-u吗