Покажите только правую сторону параллельной разницы

Кажется, я не нашел пути. Есть ли один лайнер для получения только правой части выхода 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, чтобы он выглядел оправданным в этом вопросе. Они выглядят выровненными (по столбцам) в терминале, но мне пришлось немного их отрегулировать, чтобы они отображались точно так, как они отображаются в терминале (столбцы аккуратно выровнены), но вы можете реплицировать выходные данные, создавая эти входные файлы:

File1 version 1

  2 Africa
  3 America
  3 Asia
  4 Antarctica
  4 Oceania
  7 Europe

File2 version 1

  3 Africa
  3 America
  3 Asia
  4 Antarctica
  4 Oceania
  7 Europe

File1 version 2

  3 Africa
  3 America
  3 Asia
  4 Antarctica
  4 Oceania
  8 Europe

File2 version 2 [!d12 ]

  3 Africa
  3 America
  4 Antarctica
  4 Asia
  4 Oceania
  8 Europe
1
задан 22 February 2017 в 10:56

1 ответ

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

$ 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/, избавиться от материала вокруг | или > или < на строках, которые отличаются, чтобы исправить выравнивание
2
ответ дан 23 May 2018 в 01:17
  • 1
    +1 За большой ответ. Проблема в том, что я не знаю перед собой, будет ли сравнение результатом | s, & gt ;, или обеими. Примеры текстовых файлов являются просто иллюстративными. – Tulains Córdova 21 February 2017 в 03:23
  • 2
    @ TulainsCórdova спасибо :) Я изменил его, чтобы поймать всех персонажей, но я не уверен, что он делает то, что вы хотите – Zanna 21 February 2017 в 03:30

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

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