Я, кажется, не нахожу путь вокруг этого. Есть ли острота для получения только правой стороны a diff --side-by-side
вывод?
Например:
Для этого: diff --side-by-side file1 file2
Я получаю любое из этого два типа результатов:
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
так, чтобы это казалось выровненным по ширине в этом вопросе. Они кажутся выровненными (по столбцам) в терминале, но я должен был скорректировать их немного здесь, таким образом, они появляются точно, как они появляются в терминале (столбцы, аккуратно выровненные), но можно копировать вывод, создающий этот вход файлы:
Версия 1 File1
2 Africa
3 America
3 Asia
4 Antarctica
4 Oceania
7 Europe
Версия 1 File2
3 Africa
3 America
3 Asia
4 Antarctica
4 Oceania
7 Europe
Версия 2 File1
3 Africa
3 America
3 Asia
4 Antarctica
4 Oceania
8 Europe
Версия 2 File2
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
использование ДО s/old/new/
замена old
с 'новым [^\t]*
что-либо кроме вкладок, \t*
столько вкладок, сколько Вам нравится (.*)
любое количество любых символов на строке, (сохраненной) для более позднего \1
шаблон, который мы сохранили s/^ *(\||>|<)\t /\1/
, избавляется от материала вокруг |
или >
или <
символ на строках, которые отличаются для фиксации выравнивания