unix diff side-to-side results?


106

どうすればunix diffコマンドの結果を1つずつ差分ではなく左右にプロットできますか?以下の例をご覧ください。

    diff /tmp/test1  /tmp/test2
1,4c1,2
< asfdsadf
< asdfsad
< fsaf
< fdsadf
---
> asdfsafdsf
> saf
6,8d3
< sadf
< asdf
< sadf
10d4
< fasd
12,13c6,14
< sadfa
< fd
---
> sadf
> sadf
> sadf
> sadf
> sadf
> sadf
> sadf
> sadf
> safa

私は次のようなものが欲しいです:

diff /tmp/test1  /tmp/test2
1,4c1,2
< asfdsadf       > asdfsafdsf
< asdfsad        > saf       
< fsaf
< fdsadf
---
6,8d3
< sadf
< asdf
< sadf
10d4
< fasd
12,13c6,14
< sadfa               > sadf
< fd              > sadf
---               > sadf
              > sadf
              > sadf
              > sadf
              > sadf
              > sadf
              > safa

vimdiffも役立ちます。幸運を。
シェルター2013年

回答:


168

からman diff-yサイドバイサイドで使用できます。

-y, --side-by-side
       output in two columns

したがって、次のように言います。

diff -y /tmp/test1  /tmp/test2

テスト

$ cat a                $ cat b
hello                  hello
my name                my name
is me                  is you

それらを比較してみましょう:

$ diff -y a b
hello                                                           hello
my name                                                         my name
is me                                                         | is you

39
diffは、ハードコードされた最大出力幅(130列)があることに注意してください。--width=$COLUMNSこれを端末の幅に設定するdiffオプションを追加します。
ntc2 2013年

6
:また、大規模な差分scrolly素敵なため、このようなあまりにちょうどパイプ/検索可能な差分のためのdiff -y /tmp/test1 /tmp/test2 | less
willbradley

colordiffをチェックしてください
Vladislavs Dovgalecs 2017

5
より良いdiff --width=$COLUMNS --suppress-common-lines --side-by-side a b
rubo77

@ rubo77あなたはタブ拡張を設定しているか、あなたはまた、列に適切になるように出力ラインアップタブをスペースに拡張することもできますによって:diff --expand-tabs --width=$COLUMNS --suppress-common-lines --side-by-side a b
EdwardTeach

40

icdiffのホームページから:

ここに画像の説明を入力してください

端末は色を表示できますが、ほとんどのdiffツールはそれをうまく利用していません。変更を強調表示することで、icdiffは邪魔になることなく類似ファイル間の違いを表示できます。これは、既存のライン内の小さな変更を特定して理解するのに特に役立ちます。

icdiffの目標は、あらゆる状況でdiffの代わりになることを試みるのではなく、diffからすぐに明らかでない場合に、何が変更されたかをよりよく把握するためのツールになることです。

私見、その出力はよりはるかに読みやすいですdiff -y


29
diff -y --suppress-common-lines file1 file2

3
元の質問と-y同じではない一般的な行も表示されるため、これは受け入れられる答えになるはずdiffです。+1。
らせん

より良いdiff -W $COLUMNS --suppress-common-lines -y file1 file2
rubo77

13

以下を使用できます。

sdiff  file1 file2

または

diff -y file1 file2

または

vimdiff file1 file2

並べて表示します。


2
私は違い何思っていたdiff -yとはsdiff?彼らの出力は私と同じに見えます。
Hux

11

sdiffファイルの違いを並べてマージする必要があります。man sdiff全文を読む。


2
私のシステム(GNU / Linx)sdiffはと同じことをしているように見えdiff -ysdiffinfoのドキュメントには非推奨であると記載されています。廃止されました。代わりに 'diff'の '--side-by-side'( '-y')オプションを使用してください。
ntc2 2013年

7

あなたは単に使うことができます:

diff -y fileA.txt fileB.txt | colordiff

2つの列に分割され、色分けされた出力が表示されます。(colordiff


1
OSXで試してみましたが、ここでは機能しません。多分それはLinuxのみです。
Nikola Petkanski

colordiffはosxにはありません。
テリーfranguiadakis

Homebrew See colordiff式を使用してOSXにcolordiffをインストールできます brew install colordiff
Jorge Fernando Matricali 2017年


6

cdiffを試してみてください-ワークスペースで、またはサイドバイサイドと自動ページャーをサポートする標準入力から、色付きの増分差分を表示します。



4

ファイルでスペースとタブの使用に一貫性がない場合は、-t引数を含めてタブを展開すると役立つ場合があります。

diff -ty file1 file2

1

カラー、サイドバイサイド、エイリアスを使用した強化されたdiffコマンド

ファイルの内容が次のようであるとしましょう:

cat /tmp/test1.txt
1
2
3
4
5
8
9

そして

cat /tmp/test2.txt
1
1.5
2
4
5
6
7

今並べて比較

diff --width=$COLUMNS --suppress-common-lines --side-by-side --color=always /tmp/test1.txt /tmp/test2.txt
                                                                              > 1.5
3                                                                             <
8                                                                             | 6
9                                                                             | 7

使用するエイリアスを定義できます

alias diff='diff --width=$COLUMNS --suppress-common-lines --side-by-side --color=always'

次に、新しい差分結果:

diff /tmp/test1.txt /tmp/test2.txt
                                                                              > 1.5
3                                                                             <
8                                                                             | 6
9                                                                             | 7
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.