Я хотел условно отформатировать файлы Unix, сейчас я работаю над diff
командой и хотел узнать, возможно ли отформатировать текст diff
вывода команды.
Пример:
Соответствующие значения должны отображаться зеленым цветом.
Несоответствующие значения должны отображаться красным цветом.
Предположим , у меня есть два файла file1
и file2
и моя команда diff file1 file2
.
Теперь я хотел, чтобы выходные данные содержали 5 несоответствий, тогда эти несоответствия должны отображаться красным цветом. Как добиться этого с помощью Unix?
Короче говоря "Измените цвет на красный для вывода команды diff для значений, которые не соответствуют"
Ответы:
diff --color
добавлена опция GNU diffutils 3.4 (2016-08-08)Это
diff
реализация по умолчанию на большинстве дистрибутивов, которые скоро получат ее.На 3.5 это выглядит так:
с:
Я также запросил различие в уровне слов, начиная
diff-highlight
с: [Diffutils-devel] Добавить флаг для получения цветного вывода, такого как git's diff-h | lists.gnu.orgОчевидно, добавлено в коммит c0fa19fe92da71404f809aafb5f51cfd99b1bee2 (март 2015).
источник
alias diff='diff --color=auto'
Если у вас есть доступ к GNU,
diff
вы можете использовать его--X-group-format
параметры, чтобы получить этот эффект без каких-либо дополнительных инструментов:При этом используются экранирующие коды цвета 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
.Пытаться
colordiff file1 file2
(Цитата из http://www.colordiff.org/ )
источник
diff --color=auto
были только цветные линии маркеров и первая строка каждого+
/-
раздела. Трубопроводless -SR
для облегчения просмотра.Цветной вывод на уровне слов
diff
Вот что вы можете сделать с помощью приведенного ниже сценария и diff-highlight :
( Благодарим за ответ @ retracile за
sed
выделение)источник
Вы должны взглянуть на
hl
команду, доступную на github:git clone http://github.com/mbornet-hl/hl
и на: http://www.flashnux.com/notes/page_000022_US.htmlhl
это команда Linux, написанная на C, специально разработанная для раскрашивания текстового файла или вывода команды. Вы можете использовать до 42 цветов одновременно и использовать файл конфигурации для упрощения командной строки. Вы можете раскрасить вывод каждой команды, которая может быть передана другой. И если вы знаете, что такое регулярные выражения, вам будет очень легко пользоваться. Вы можете использоватьman
страницу, чтобы понять, как ее использовать.hl
очень прост в использовании и настройке. Вы даже можете использовать скрипт hl_generic для раскрашивания выводимых команд без изменения их синтаксиса.Например, вы можете раскрасить вывод
diff
команды, просто набрав вашу обычную команду:Если вам нужна помощь, просто пришлите мне по электронной почте.
С уважением.
источник
На данный момент на Github есть действительно удобный инструмент, созданный с помощью python
icdiff
. Создает приятные цветные выходы, которые также знают о «серьезности». Я использую это все время, хорошо стоит проверить.источник
если у вас установлен vim, вы можете сделать
diff file1 file2 | vim -
Vim распознает формат diff и придаст ему правильную окраску. Черта в конце должна позволить vim принимать ввод от команды diff.
источник
Установите универсальный колоризатор ( grc ) и:
Доступно как в Linux, так и в MacOS.
источник
Либо вы можете использовать
1.
diff --color=auto file1 file2
2.
colordiff file1 file2
3. Мой любимый:
git diff file1 file2
реализовано как ниже:В настоящее время я использую и рекомендую , используя
git diff
или передавая свой вывод сcolordiff
помощью:diff() { git diff --no-index "$1" "$2" | colordiff; }
источник
git diff --no-index
тоже нравится, но я думаю, что файлы должны быть доступны для поиска. (По крайней мере, у меня не работает замена процесса bash)git diff
и файл для меня можно найти, иначе не было бы смысла делать это правильно.diff --color <(ls | head -n+3) <(ls | tail -n +5)
но не сgit diff
. По общему признанию, не частый случай или слишком трудно обойти.Просто примечание: для получения «параллельного» вывода вам нужно «--color = always». Вы также можете разбить его на страницы с меньшим количеством и сохранить цветной вывод:
И еще одна подсказка: попытайтесь сохранить переключатель «--color = всегда» в конце. Причина? С помощью dmesg из util-linux 2.27.1:
источник
Этот скрипт использует стандартную версию до версии 3.4 diff (он должен работать с любой версией diff) и раскрашивает выходные данные без какого-либо изменения формата вывода. Он работает с последней версией RHEL (версия 7.5), которая имеет GNU diff версии 3.3. Просто поместите его в каталог ~ / bin или в любое другое место вашего пути (я предлагаю называть его "cdiff").
источник
Различия цвета на уровне персонажа: Установите ccdiff
источник