私はこれを回避する方法を見つけていないようです。 diff --side-by-side
出力の右側のみを取得するワンライナーはありますか?
例えば:
このため:diff --side-by-side file1 file2
この2つのタイプの結果のいずれかを取得します。
2 Africa | 3 Africa
3 America 3 America
3 Asia 3 Asia
4 Antarctica 4 Antarctica
4 Oceania 4 Oceania
7 Europe 7 Europe
または
3 Africa 3 Africa
3 America 3 America
3 Asia <
4 Antarctica 4 Antarctica
> 4 Asia
4 Oceania 4 Oceania
8 Europe 8 Europe
どうすればこれらをこれに変換できますか
| 3 Africa
3 America
3 Asia
4 Antarctica
4 Oceania
7 Europe
そしてこれはそれぞれ:
3 Africa
3 America
4 Antarctica
> 4 Asia
4 Oceania
8 Europe
この質問で正当化されるように、diff
の元の出力を編集したことに注意してください。それらは端末で(列方向に)整列して表示されますが、端末に表示されるように正確に表示されるようにここで少し調整する必要がありました(列がきれいに整列されます)が、この入力ファイルを作成して出力を複製できます:
File1バージョン1
2 Africa
3 America
3 Asia
4 Antarctica
4 Oceania
7 Europe
File2バージョン1
3 Africa
3 America
3 Asia
4 Antarctica
4 Oceania
7 Europe
File1バージョン2
3 Africa
3 America
3 Asia
4 Antarctica
4 Oceania
8 Europe
File2バージョン2
3 Africa
3 America
4 Antarctica
4 Asia
4 Oceania
8 Europe
あなたが望むように見えるのは、まったく横並びの差分ではなく、古いファイルまたは新しいファイルから行を完全に除外するようにフォーマットをカスタマイズするものです。たとえば、与えられた
$ cat file1v1
2 Africa
3 America
3 Asia
4 Antarctica
4 Oceania
7 Europe
$ cat file2v1
3 Africa
3 America
3 Asia
4 Antarctica
4 Oceania
7 Europe
それから
$ diff --new-line-format='| %L' --unchanged-line-format=' %L' --old-line-format= file1v1 file2v1
| 3 Africa
3 America
3 Asia
4 Antarctica
4 Oceania
7 Europe
与えられながら
$ cat file1v2
3 Africa
3 America
3 Asia
4 Antarctica
4 Oceania
8 Europe
$ cat file2v2
3 Africa
3 America
4 Antarctica
4 Asia
4 Oceania
8 Europe
それから
$ diff --new-line-format='> %L' --unchanged-line-format=' %L' --old-line-format= file1v2 file2v2
3 Africa
3 America
4 Antarctica
> 4 Asia
4 Oceania
8 Europe
これは実際には右列ですが、最終的には左になります。また、それは非常にいソリューションであり、私はいくつかの賢い人々が良くなると確信しています。とにかくここにあります:
$ diff --side-by-side file1 file2 | sed -r 's/[^\t]*\t*(.*)/\1/' | sed -r 's/^ *(\||>|<)\t /\1/'
| 3 Africa
3 America
3 Asia
4 Antarctica
4 Oceania
7 Europe
-r
EREを使用s/old/new/
old
を `newに置き換えます[^\t]*
タブ以外のもの、お願いします\t*
好きなだけのタブ(.*)
行の任意の数の任意の文字、(保存)後で使用するため\1
保存したパターンs/^ *(\||>|<)\t /\1/
整列を修正するために異なる行の|
または>
または<
文字の周りのものを取り除きます