Кольоровий grep

Липень 6th, 2009

Майже випадково дізнався, що grep вміє розмальовувати текст, що виводиться. Для цього потрібно лише додати опцію командного рядка --color. Крім того, у користувача є можливість самому задавати кольори тексту, що виводиться.

Втім, як і заведено у лінуксовому світі, можливість ця реалізована неймовірно криво. Кольорова схема задається у змінній оточення GREP_COLORS. Приблизно так:

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

Змінна містить список пар <параметр>=<колір>, розділених двокрапкою. З параметрами усе просто. Я їх коротко перерахую основні, а за деталями — man grep ;) :

  • fn – імена файлів
  • ms — частина рядку, яка, власне, і співпала з вказаним regexp
  • sl – рядок, що містить співпадіння (виділяти його корисно, якщо ви використовуєте опію –context)
  • cx — протилежність sl, рядок, що не містить співпадіння

З кольорами складніше. Кожний колір задається послідовністю чисел, розділених крапкою з комою. Кожне число по-своєму впливає на результат відображення. Глянемо спочатку на список готових комбінацій:

Black      0;30    Dark Gray    1;30
Blue       0;34    Light Blue   1;34
Green      0;32    Light Green  1;32
Cyan       0;36    Light Cyan   1;36
Red        0;31    Light Red    1;31
Purple     0;35    Light Purple 1;35
Brown      0;33    Yellow       1;33
Light Gray 0;37    White        1;37

Число 0 означає, що буде викотистовуватись темний колір, 1 – світлий (крім того, у деяких терміналах 1 озрачає, що текст буде жирним. У мене саме такий термінал, це видно зі скріншоту). 4 – підкреслений шрифт, 5 – блимаючий. Числа від 30 до 37 задають колір шрифту, а з 40 по 47 – фону. У man grep сказано, що фон задається числами 90..97, однак у мене це не діє.
Пара прикладів:

  • 1;31 – жирний яскраво-червоний (на скіншоті цим кольором позначено співпадаючу частину)
  • 4;0;37 – підкреслені сірі літери на чорному фоні
  • 4;43;34 – темно-сині літери на темно-жовтому фоні

Така схема позначення кольорів діє не лише у grep, вона використовуєтья і в інших місцях (у ls, наприклад). Можливо, коли-небудь потім я зберуся присвятити цьому окремий допис.

Категорії: bash, linux | Теґи:,

Залишити коментар