Покажите только правую сторону - бок о бок разность

Я, кажется, не нахожу путь вокруг этого. Есть ли острота для получения только правой стороны 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
4
задан 22 February 2017 в 09:56

2 ответа

То, что Вы, кажется, хотите, не бок о бок разность вообще - а скорее та, в которой Вы настраиваете формат для исключения строк или из старого или из нового файла полностью. Например, учитывая

$ 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
4
ответ дан 1 December 2019 в 09:21

Это - на самом деле Правый столбец, хотя он заканчивается слева. Кроме того, это - очень ужасное решение, и я уверен, что некоторые более умные люди добьются большего успеха. Но вот, так или иначе:

$ 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/, избавляется от материала вокруг | или > или < символ на строках, которые отличаются для фиксации выравнивания
2
ответ дан 1 December 2019 в 09:21

Другие вопросы по тегам:

Похожие вопросы: