Изменение цвета grep

23

Когда я что-то grep, результат всегда в красном. Я знаю, что команда grep --colorпечатает результат в цвете, который по умолчанию красный. Могу ли я изменить цвет?

Codito Ergo Sum
источник

Ответы:

18

Вы можете изменить цвет подсветки grep, используя переменную окружения GREP_COLORS, которую вы можете установить следующим образом:

export GREP_COLORS='ms=01;31'

Числовые параметры

Числа могут стилизовать текст, изменить цвет переднего плана или цвет фона или изменить шрифты.

Начальными условиями для всех GREP_COLORSпараметров являются стиль текста по умолчанию, шрифт и цвета терминала. Сброс любого из них вернет значения по умолчанию терминала, а не любые из grepзначений по умолчанию.

легенда

  • ;ʙ;- ;разделяет числовые параметры , которые вы хотите объединить (например, жирный желтый на черном фоне текст сочетает в себе варианты 1, 33и 40в 1;33;40)
  • +ᴇꜰꜰᴇᴄᴛ- turned включается, когда вы используете эту числовую опцию
  • -ᴇꜰꜰᴇᴄᴛ- ᴇꜰꜰᴇᴄᴛ отключается при использовании этой числовой опции
  • color, green, cyan, И grey- в разделе «Стиль текста», это относится к цвету переднего плана
  • colors - в разделе «Стиль текста» это относится как к цвету переднего плана, так и к цвету фона
  • this color- в разделе «Цвета переднего плана» это относится к цвету переднего плана; в разделе «Цвет фона» это относится к цвету фона

Стилизация текста

Пустая строка или 0сбрасывает все стили текста и сбрасывает оба цвета по умолчанию, но шрифт по умолчанию не сбрасывается.

┏━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━┓
┃ ### ┃ GNOME Terminal          ┃ xterm                   ┃ non-GUI TTY           ┃
┡━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━┩
│     │ «reset style+colors»    │ «reset style+colors»    │ «reset style+colors»  │
│   0 │ «reset style+colors»    │ «reset style+colors»    │ «reset style+colors»  │
├─────┼─────────────────────────┼─────────────────────────┼───────────────────────┤
│   1 │ +bold, +brighter color  │ +bold, +brighter color  │ +brighter color,      │
│     │                         │                         │   -forced grey        │
│   2 │ +fainter color          │ +fainter color          │ +forced grey          │
│   3 │ +italic                 │ +italic                 │ +forced green         │
│     │                         │                         │   ● overrides 2 and 4 │
│   4 │ +underline              │ +underline              │ +forced cyan          │
│     │                         │                         │   ● overrides 2       │
│   5 │ «no effect»             │ +blink                  │ «no effect»           │
│   7 │ +invert colors          │ +invert colors          │ +invert colors        │
│   8 │ +invisible              │ +invisible              │ «no effect»           │
│     │                         │   ● underline appears   │                       │
│   9 │ +strikethrough          │ +strikethrough          │ «no effect»           │
├─────┼─────────────────────────┤                         ├───────────────────────┤
│  21 │ -bold, -brighter color, │ +double underline       │ -brighter color,      │
│     │   -fainter color        ├─────────────────────────┤   -forced grey        │
│  22 │ -bold, -brighter color, │ -bold, -brighter color, │ -brighter color,      │
│     │   -fainter color        │   -fainter color        │   -forced grey        │
│  23 │ -italic                 │ -italic                 │ -forced green         │
│  24 │ -underline              │ -underline,             │ -forced cyan          │
│     │                         │   -double underline     │                       │
│  25 │ «no effect»             │ -blink                  │ «no effect»           │
│  27 │ -invert colors          │ -invert colors          │ -invert colors        │
│  28 │ -invisible              │ -invisible              │ «no effect»           │
│  29 │ -strikethrough          │ -strikethrough          │ «no effect»           │
└─────┴─────────────────────────┴─────────────────────────┴───────────────────────┘

Цвета переднего плана

┏━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━┓
┃ ### ┃ GNOME Terminal          ┃ xterm                   ┃ non-GUI TTY           ┃
┡━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━┩
│  39 │ «reset this color»      │ «reset this color»      │ «reset this color»    │
├─────┼─────────────────────────┼─────────────────────────┼───────────────────────┤
│  30 │ very dark grey          │ black                   │ black                 │
│  31 │ dull red                │ red                     │ light red             │
│  32 │ dull green              │ light green             │ light green           │
│  33 │ dull yellow             │ yellow                  │ yellow                │
│  34 │ greyish blue            │ dark blue               │ sky blue              │
│  35 │ dull purple             │ purple                  │ purple                │
│  36 │ teal                    │ cyan                    │ cyan                  │
│  37 │ light grey              │ light grey              │ light grey            │
├─────┼─────────────────────────┼─────────────────────────┼───────────────────────┤
│  90 │ dark grey               │ dull grey               │ dull grey             │
│  91 │ red                     │ bright red              │ bright red            │
│  92 │ lime green              │ bright green            │ bright green          │
│  93 │ yellow                  │ bright yellow           │ pure yellow           │
│  94 │ light greyish blue      │ dull blue               │ deep blue             │
│  95 │ light purple            │ magenta                 │ magenta               │
│  96 │ cyan                    │ bright cyan             │ bright cyan           │
│  97 │ off white               │ white                   │ white                 │
├─────┴──────┬──────────────────┴─────────────────────────┴───────────────────────┤
│ 38;2;ʀ;ɢ;ʙ │ replace ʀ, ɢ, and ʙ with RGB values from 0 to 255                  │
│            │   for closest supported color (non-GUI TTY has only 16 colors!)    │
│ 38;5;ɴ     │ replace ɴ with value from 256-color chart below                    │
│            │   for closest supported color (non-GUI TTY has only 16 colors!)    │
└────────────┴────────────────────────────────────────────────────────────────────┘

Цвета фона

Обратите внимание, что TTY без GUI не обеспечивает более яркую серию фоновых цветов.

┏━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━┓
┃ ### ┃ GNOME Terminal          ┃ xterm                   ┃ non-GUI TTY           ┃
┡━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━┩
│  49 │ «reset this color»      │ «reset this color»      │ «reset this color»    │
├─────┼─────────────────────────┼─────────────────────────┼───────────────────────┤
│  40 │ very dark grey          │ black                   │ black                 │
│  41 │ dull red                │ red                     │ light red             │
│  42 │ dull green              │ light green             │ light green           │
│  43 │ dull yellow             │ yellow                  │ yellow                │
│  44 │ greyish blue            │ dark blue               │ sky blue              │
│  45 │ dull purple             │ purple                  │ purple                │
│  46 │ teal                    │ cyan                    │ cyan                  │
│  47 │ light grey              │ light grey              │ light grey            │
├─────┼─────────────────────────┼─────────────────────────┼╶╴╶╴╶╴╶╴╶╴╶╴╶╴╶╴╶╴╶╴╶╴╶┤
│ 100 │ dark grey               │ dull grey               │ black                 │
│ 101 │ red                     │ bright red              │ light red             │
│ 102 │ lime green              │ bright green            │ light green           │
│ 103 │ yellow                  │ bright yellow           │ yellow                │
│ 104 │ light greyish blue      │ dull blue               │ sky blue              │
│ 105 │ light purple            │ magenta                 │ purple                │
│ 106 │ cyan                    │ bright cyan             │ cyan                  │
│ 107 │ off white               │ white                   │ light grey            │
├─────┴──────┬──────────────────┴─────────────────────────┴───────────────────────┤
│ 48;2;ʀ;ɢ;ʙ │ replace ʀ, ɢ, and ʙ with RGB values from 0 to 255                  │
│            │   for closest supported color (non-GUI TTY has only 8 colors!)     │
│ 48;5;ɴ     │ replace ɴ with value from 256-color chart below                    │
│            │   for closest supported color (non-GUI TTY has only 8 colors!)     │
└────────────┴────────────────────────────────────────────────────────────────────┘

256-цветная диаграмма

256-цветная диаграмма

На приведенной выше диаграмме показан снимок экрана с содержимым, опубликованным в "ESC-коде ANSI, 8-битных цветах" в Википедии , автором которого является CMG Lee et al. 24 февраля 2016 года и позднее , и лицензированы авторами как по лицензии CC BY-SA 3.0, так и по лицензии GFDL .

Цвета из приведенной выше 256-цветовой таблицы можно использовать следующим образом:

  • 38;5;ɴ- замените ɴ значением определенного цвета на приведенной выше диаграмме, чтобы изменить цвет переднего плана на ближайший цвет, поддерживаемый терминалом
  • 48;5;ɴ- замените ɴ значением определенного цвета в приведенной выше таблице, чтобы изменить цвет фона на ближайший цвет, поддерживаемый терминалом

Например, 38;5;214;48;5;30цвет переднего плана и цвет 214фона будут заданы 30оранжевым цветом на терминалах, которые его поддерживают.

Обратите внимание, что не все терминалы поддерживают все 256 цветов, поэтому важно понимать, что выбранный цвет может не использоваться. Будет использоваться только поддерживаемый цвет, ближайший к выбранному.

Например, TTY без GUI поддерживает только основные 16 цветов для переднего плана и 8 основных цветов для фона, поэтому ближайшие цвета, которые в итоге будут использоваться, могут не соответствовать вашим ожиданиям. Например, выделение оранжевого на бирке выше ( 38;5;214;48;5;30) отображается как желтое на черном в TTY без GUI, так как это самые близкие поддерживаемые цвета.

шрифты

10это шрифт по умолчанию. 11через 20потенциальные альтернативные шрифты ( 20обычно означает 𝕱𝖗𝖆𝖐𝖙𝖚𝖗 шрифт в тех редких терминалах, которые его поддерживают). Только 10и, 12кажется, существует по умолчанию в TTY без GUI, и ни один не существует в терминале GNOME или xterm.

grepнеправильно переключает шрифты обратно перед выходом, поэтому запускайте, resetесли вы застряли в нежелательном шрифте после grepвозврата в оболочку.

┏━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━┓
┃ ### ┃ GNOME Terminal          ┃ xterm                   ┃ non-GUI TTY           ┃
┡━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━┩
│  10 │ «no effect»             │ «no effect»             │ «reset font»          │
│  11 │ «no effect»             │ «no effect»             │ -messed up font       │
│  12 │ «no effect»             │ «no effect»             │ +messed up font       │
└─────┴─────────────────────────┴─────────────────────────┴───────────────────────┘

Источники раздела «Числовые параметры»:
        «Экранирующий код ANSI, параметры SGR (Select Graphic Rendition)» в Википедии.
        ● Экспериментальная проверка на терминале GNOME xtermи TTY в не-GUI-режиме в Ubuntu 16.04.


примеры изменения цвета после настройки <code> GREP_COLORS </ code>

Значением по умолчанию GREP_COLORSявляется'ms=01;31:mc=01;31:sl=:cx=:fn=35:ln=32:bn=32:se=36'

Смысл каждого принятого элемента GREP_COLORSможно проверить на странице руководства GNU.org .

Для завершения, и, как указал @damadam, вам нужно добавить в exportсвой файл .bashrc, чтобы сохранить изменения.

Связанный:

Разноцветный Grep

Используйте разные цвета для каждого другого grep

М. Бесерра
источник
2
Доступно гораздо больше цветов и вариантов форматирования, попробуйте <<<hello GREP_COLORS='ms=5;104' grep '.*'один раз! Список кодов можно найти, например, здесь (раздел 6).
десерт
1
Как вы используете значения цвета из таблицы 256 цветов с GREP_COLORS?
Себастьян Старк
1
@SebastianStark Для переднего плана используйте 38;5;ɴ, где ɴ следует заменить одним из значений цвета. Для фона используйте 48;5;ɴтаким же образом. Например, 38;5;214;48;5;30должен дать вам оранжевый на чирок. Если это не так, ваш терминал может не поддерживать 256 цветов. Например, TTY без GUI поддерживает только 16 цветов для переднего плана и 8 для фона и выберет цвета переднего плана и фона из тех 16 и 8, которые ближе всего к оранжевому на бирюзовом, который желтый на черном.
Чай Т. Рекс,
1
@ ChaiT.Rex THX, работает просто отлично. Это не очень очевидно из ответа, хотя.
Себастьян Старк
2
@ ChaiT.Rex спасибо, хотя для меня проблема была больше в том, что в разделе «256 цветов» нет упоминания об этих параметрах, только таблица цветов
Себастьян Старк
6

Помимо ответа от @M. Бесерра, не забудь добавить это exportвнутрь ~/.bashrc. Вы можете сделать это так:

nano ~/.bashrc

и введите теперь ваш export:

export GREP_COLORS='ms=01;33:mc=01;31:sl=:cx=:fn=35:ln=32:bn=32:se=36'

Это устанавливает grepжелтые результаты, и мне не нужно повторять exportтерминал после перезагрузки или компьютер.

damadam
источник
5
отредактируйте оригинальный ответ, чтобы сделать его лучше в следующий раз.
Турбьёрн Равн Андерсен
Это лучше, НО это только работает на Linux, а не на Mac :(
Шридхар Сарнобат
@SridharSarnobat Mac действительно отличается от Ubuntu, Mac не Linux, и я делаю этот шаг для Ubuntu (если бы это был Mac, это было бы не по теме, вопросы Mac нужно задавать на Ask Different
damadam
Да. Не стоит публиковать еще один вопрос только для того, чтобы показать свою грусть :)
Шридхар Сарнобат