Убунтология

Популярное содержимое

Раскраска вывода команд с помощью grc

 

Автор статьи: Чувак с гранатой

 

Я думаю, у многих начинающих пользователей Ubuntu хотя бы раз появлялось желание как-нибудь "оживить" работу в консоли. В этой статье рассказывается, как сделать разноцветной строку приглашения, но можно пойти ещё дальше и по своему усмотрению раскрасить вывод любой команды.
Например, по умолчанию "ping ya.ru" показывает такой результат:

А после раскраски:

Имя хоста выделяется пурпурным цветом, ip-адрес - жёлтым, а числовые значения и результаты пинга - синим. Удобней, не правда ли?

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

Итак, нам понадобится установить программу grc:

sudo apt-get install grc

Создадим главный конфигурационный файл программы и откроем его:

mkdir ~/.grc
gedit ~/.grc/grc.conf

Формат здесь довольно простой. Файл разделён на отдельные блоки из двух строк: в первой должно быть написано регулярное выражение, обозначающее команду, а во второй - соответствующий ей файл настройки. Если строка пустая или начинается с символа "#" (комментарий), она игнорируются программой.

Добавим описания для двух команд:

# команда cat
^cat\s
conf.cat

# команда ping
^ping\s
conf.ping

Чтобы запускать их в режиме раскраски, перед вводом команды надо добавить вызов grc. Но мы поступим проще: создадим для них синонимы в файле .bashrc (если вы используете другую командную оболочку, редактируйте её файл настройки):

gedit ~/.bashrc

Допишем туда следующие строки:

# grc
alias cat='grc cat'
alias ping='grc ping'

Перезапустим терминал, чтобы применить новые настройки.

Теперь рассмотрим файлы с правилами раскраски команд. Они состоят из блоков, описывающих раскраску определённой подстроки вывода команды. Разделителем между блоками может быть любой символ, кроме букв, цифр и знака "#". Комментарии и пустые строки здесь тоже ингнорируются.
Создадим файл conf.cat (отвечает за раскраску вывода команды cat):

gedit ~/.grc/conf.cat

И скопируем в него следующее правило:

# комментарий
regexp=^#.*$
colours=blue

Во второй строке находится регулярное выражение для поиска подстроки, в третьей - цвет, которым подстрока должна выделяться. В данном случае, синим цветом раскрашиваются все строки, начинающиеся с символа "#", то есть комментарии.

Пример вывода команды cat:

Для раскраски можно использовать следующие цвета: black, red, green, yellow, blue, magenta, cyan, white, default (стандартный), unchanged (оставить текущий цвет).

Приставка "on_" в названии цвета означает раскраску фона: "on_yellow", "on_blue white" (белый текст на синем фоне).
Также перед цветом шрифта можно добавлять значения: bold (полужирный), underline (подчёркнутый), strikethrough (зачёркнутый), reverse (инвертированный), concealed (невидимый), dark (более тёмный оттенок). Например: "bold red", "dark green".

Теперь создадим файл conf.ping:

gedit ~/.grc/conf.ping

Вставим туда такие правила:

# имя хоста
regexp=(?<=from\s).*(?=\s\()
colours=magenta
=
# ip-адрес
regexp=\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}(?=\)?:)
colours=dark yellow
=
# числовые значения
regexp=(?<==)\d+\.?\d*
colours=blue
=
# результаты
regexp=\s(\d+\.?\d*)/(\d+\.?\d*)/(\d+\.?\d*)/(\d+\.?\d*)\s
colours=unchanged, blue, blue, blue, blue

Остановлюсь лишь на последнем блоке, который описывает выделение результатов пинга. Тут перечислены сразу несколько цветов: unchanged и четыре раза blue. Так как регулярное выражение состоит из нескольких запоминаемых соответствий, ограниченных круглыми скобками (здесь они одинаковые: "\d+\.?\d*"), каждому из них назначается свой цвет (синий). Первый же цвет (unchanged) относится ко всему выражению. То есть при нахождении удовлетворяющей условию строки сама она остаётся без изменений, но все остальные соответствия выделяются синим.

Перечислю ещё несколько параметров для правил:

skip=yes/no

Пропустить вывод строки при найденом соответствии (по умолчанию, "no").

count=more/once/stop

Количество допустимых соответствий в строке:

    more - неограниченно (по умолчанию);
    once - только одно;
    stop - только одно, после раскраски найденного соответствия перейти к следующей строке, пропустив остальные правила.
Более подробно ознакомиться с возможностями программы можно здесь.