如何使用完整上下文区分两个文件?

Pee*_*eja 21 unix diff command-line

我有两个文件略有不同.法线diff将显示文件之间的差异.用-c-u我可以上下文的量添加到每一大块.我可以传递哪些选项diff来查看每个未更改的行以及更改,并将diff作为单个大块?

mad*_*lep 24

使用"-y"选项可以完全并排输出

diff -y file1 file2

会给你输出类似的东西

* Lorem ipsum dolor sit amet, consectetuer adipiscing elit.     * Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
* Praesent fringilla facilisis pede.                            * Praesent fringilla facilisis pede.
* Nulla sit amet tellus id massa luctus pellentesque.           * Nulla sit amet tellus id massa luctus pellentesque.
* Pellentesque a neque nec elit aliquam congue.                 * Pellentesque a neque nec elit aliquam congue.
* Quisque rhoncus ultricies elit.                               * Quisque rhoncus ultricies elit.
* Pellentesque laoreet urna id arcu.                            * Pellentesque laoreet urna id arcu.
* Aenean non erat et elit egestas dictum.                       * Aenean non erat et elit egestas dictum.
* Proin ornare sem eget nulla.                                  * Proin ornare sem eget nulla.
* Phasellus placerat convallis elit.                            * Phasellus placerat convallis elit.
* Donec ultricies metus non purus.                              * Donec ultricies metus non purus.
* Sed vel enim et nunc accumsan egestas.                        * Sed vel enim et nunc accumsan egestas.
* Cras eget elit in purus luctus ornare.                        * Cras eget elit in purus luctus ornare.
* In pharetra ligula sodales pede.                            <
* Morbi consectetuer mi vitae sem.                              * Morbi consectetuer mi vitae sem.
* Donec sollicitudin pretium erat.                              * Donec sollicitudin pretium erat.
* Cras facilisis nunc sed leo.                                  * Cras facilisis nunc sed leo.
* Nunc varius ante sed nisi.                                    * Nunc varius ante sed nisi.
                                                              > THIS SHOULDN'T BE HERE
                                                              > THIS SHOULDN'T EITHER!
* Aenean in quam sagittis est ornare ultricies.                 * Aenean in quam sagittis est ornare ultricies.
* Etiam dignissim scelerisque velit.                            * Etiam dignissim scelerisque velit.
* Mauris porta fringilla sapien.                                * Mauris porta fringilla sapien.
* Proin vitae nisl vitae mauris viverra tempor.                 * Proin vitae nisl vitae mauris viverra tempor.
* Maecenas quis arcu sed lorem mollis bibendum.                 * Maecenas quis arcu sed lorem mollis bibendum.
* Morbi sed turpis non risus molestie posuere.                | * Morbi sed non risus molestie posuere.
* Curabitur id magna in nulla commodo tristique.                * Curabitur id magna in nulla commodo tristique.
* Praesent quis nulla vel augue faucibus viverra.             | * Praesent quis nulla BAD vel augue faucibus viverra.
* Sed interdum libero.                                        | * Sed lacinia interdum libero.
                                                              > ANOTHER ADDITION
* Donec ultricies posuere arcu.                                 * Donec ultricies posuere arcu.
* Etiam interdum auctor mi.                                     * Etiam interdum auctor mi.
Run Code Online (Sandbox Code Playgroud)


Ale*_*x B 24

您还可以覆盖diff格式行为以获得所需的行为,而无需使用并排模式:

diff --new-line-format='+%L' --old-line-format='-%L' --unchanged-line-format=' %L' file1 file2
Run Code Online (Sandbox Code Playgroud)

此命令将向您显示完整文件作为上下文,并且格式最接近 diff -u file1 file2


Mar*_*rus 12

解决方案是设置一个大于文件本身的上下文大小(-U参数):

diff -U 1000000 file1.txt file2.txt
Run Code Online (Sandbox Code Playgroud)

  • 感谢您的回答!快速说明:在我的机器上,我可以只使用“-U -1”而不是“-U 1000000”,而不必担心使用足够大的数字。(我不确定这是为什么;也许是因为 -1 计算结果是一个巨大的无符号数。)这仍然受到 @raarts 提出的相同问题的影响——它对没有差异的文件没有任何作用。 (4认同)
  • 请注意,这不会为没有差异的文件输出任何内容。如果您需要对一大堆文件执行此操作,其中有些文件可能根本没有更改,这会很不方便 (3认同)
  • @JL `-U -1` 在 diffutils 3.8 中不再有效(标记于 2021 年 8 月,基本更改 https://git.savannah.gnu.org/cgit/diffutils.git/commit/src/diff.c?id= 8d26b1403e8607811ccebdfe2822f2dad42a36d3):/ (2认同)