Цветовая разность

Я новичок в unix. Я хотел отформатировать файлы Unix условно, в настоящее время я работаю над командой diff и хотел узнать, можно ли форматировать текст вывода команды diff .

Пример:

Соответствующие значения должны отображаться зеленым цветом.
Непревзойденные значения должны отображаться красным цветом.

Предположим, у меня есть два файла file1 и file2 а моя команда – diff file1 file2 .

Теперь я хотел, чтобы предполагаемый вывод содержал 5 несоответствий, тогда эти несоответствия должны отображаться красным цветом. Как это сделать с помощью unix?

Короче: «Измените цвет на красный для вывода команды diff для значений, которые не соответствуют»,

  • Как получить текущую дату и время в формате YYYYMMDDHHMMSS в ksh88?
  • Специальный символ AWK
  • Где $ _ определяется POSIX?
  • Когда полезно использовать «grep - SOMEPATTERN»?
  • Чтение из файла с разделителями символов и назначение в переменные | для электронной почты
  • Код возврата lftp
  • KSH / BASH Максимальный размер массива
  • Как создать цикл из списка, переименованного из предыдущей команды?
  • 5 Solutions collect form web for “Цветовая разность”

    Если у вас есть доступ к GNU diff вы можете использовать его опции --X-group-format для получения этого эффекта без каких-либо дополнительных инструментов:

     diff --old-group-format=$'\e[0;31m%<\e[0m' \ --new-group-format=$'\e[0;31m%>\e[0m' \ --unchanged-group-format=$'\e[0;32m%=\e[0m' \ file1 file2 

    Это использует коды отмены цвета ANSI, чтобы получить красный и зеленый цвета, при этом ANSI-C цитирует в оболочке доступ к экранам \e .

    --old-group-format и --new-group-format идентифицируют несогласованные строки и вставляют их между красными и цветовыми кодами сброса с использованием %< и %> , тогда как --unchanged-group-format вставляет соответствующие линии между зелеными и сбросить коды.

    Вы также можете использовать --old-line-format (и т. Д.) За счет избыточных цветовых экранов в каждой строке: --old-line-format=$'\e[0;31m%L\e[0m' .

    Добавлена ​​опция diff --color GNU diffutils 3.4 (2016-08-08)

    Это стандартная реализация diff для большинства дистрибутивов, которая скоро получит ее.

    На 3.5 это выглядит так:

    введите описание изображения здесь

    с:

     diff --color -u \ <(seq 6 | sed 's/$/ a/') \ <(seq 8 | grep -Ev '^(2|3)$' | sed 's/$/ a/') 

    Я также запросил разницу на уровне слов как от diff-highlight адресу: https://lists.gnu.org/archive/html/diffutils-devel/2017-01/msg00001.html

    По-видимому, добавлено в commit c0fa19fe92da71404f809aafb5f51cfd99b1bee2 (март 2015 г.).

    Попробуйте colordiff file1 file2

    Доступность colordiff с дистрибутивом Linux / BSD

    Те, кто использует Debian или Ubuntu (или любые их производные), возможно, просто используют «apt-get install colordiff» для загрузки и установки; colordiff также упакован для ряда других дистрибутивов Linux и UNIX и BSD и операционных систем.

    (Цитата из http://www.colordiff.org/ )

    Вы должны взглянуть на команду hl доступную в github: git clone http://github.com/mbornet-hl/hl и на: http://www.flashnux.com/notes/page_000022_US.html

    hl – это команда Linux, написанная на C, специально предназначенная для цветного текстового файла или вывода команды. Вы можете использовать до 42 цветов одновременно и использовать файл конфигурации для упрощения командной строки. Вы можете раскрасить вывод каждой команды, которая может быть передана по каналу на другую. И если вы знаете, что такое регулярные выражения, вам будет очень легко пользоваться. Вы можете использовать man страницу, чтобы понять, как ее использовать.
    hl очень прост в использовании и настройке. Вы даже можете использовать hl_generic- скрипт для раскрашивания выводимых команд без изменения их синтаксиса.
    Вы можете, например, раскрасить вывод команды diff просто набрав обычную команду:

     diff file1 file2 

    Если вам нужна помощь, просто отправьте мне электронное письмо.
    С уважением.

    Цветной, разностный уровень

    Вот что вы можете сделать с приведенным ниже сценарием и diff-highlight :

    Цветной скриншот diff

     #!/bin/sh -eu # Use diff-highlight to show word-level differences diff -U3 --minimal "$@" | sed 's/^-/\x1b[1;31m-/;s/^+/\x1b[1;32m+/;s/^@/\x1b[1;34m@/;s/$/\x1b[0m/' | diff-highlight 

    (Кредит на ответ @ retracile для подсветки sed )

    Linux и Unix - лучшая ОС в мире.