Кольоровий 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, наприклад). Можливо, коли-небудь потім я зберуся присвятити цьому окремий допис.


