Colored less, grep and ls

Автор: | 11 марта 2012

В одной старой заметке я рассказывал, как раскрасить вывод ls в tcsh (csh). Все работает хорошо до тех пор, пока вы не перенаправите вывод команды ls через пайп | другой команде, например less.

Раскрашенный вывод содержит специальные Escape-последовательности, которые обозначают начало и конец блока текста, который нужно, например, выделить, раскрасить или подчеркнуть. Если передать такой текст команде, которая его не понимает (или не отображает без специального ключа), она выведет на экран или в файл все эти добавленные символы.

Раскрашиваем less и more (colored less and more)

less и more поддерживают отображение раскрашенного вывода, но чтобы они его отображали корректно, т.е. в раскрашенном виде, нужен ключ –R:

<command> | less -R
<command | more -R

Можно добавить в файл настроек .cshrc:

alias less less -R

less (он же more*) еще умеет отображать man в раскрашенном виде (по умолчанию, там есть раскрашивание). man использует more для отображения вывода:

     -P pager  Specify which pager to use.  By default, man uses ``more -s''.
               This option overrides the PAGER environment variable.

* убедитесь сами, less и more – один и тот же файл:

ls -laio /usr/bin/less /usr/bin/more

Для того, чтобы man был раскрашен в цвета, добавьте в .cshrc строки:

setenv  LESS_TERMCAP_mb "^[[01;31m"       # begin blinking
setenv  LESS_TERMCAP_md "^[[01;38;5;74m"  # begin bold
setenv  LESS_TERMCAP_me "^[[0m"           # end mode
setenv  LESS_TERMCAP_se "^[[0m"           # end standout-mode
setenv  LESS_TERMCAP_so "^[[38;5;246m"    # begin standout-mode - info box
setenv  LESS_TERMCAP_ue "^[[0m"           # end underline
setenv  LESS_TERMCAP_us "^[[04;38;5;146m" # begin underline

ВНИМАНИЕ: вместо последовательности ^[ нужно вставить ESC-символ, сделать это можно в редакторе ee нажав CTRL+O и введя код 027. Если вы пользуетесь другим редактором, то наверняка и там найдете способ ввода специального символа 😉

Цвет выделенного текста можете заменить на тот, что вам нравится. Чтобы не перелогиниваться в консоль для применения новых настроек или не устанавливать переменные вручную, запустите

source .cshrc
Раскрашиваем ls (colored ls)

После манипуляций, приведенных в старой заметке, ls уже выводит каталоги и имена файлов раскрашенными, но при передаче вывода, например, less, вся раскраска отключается:

ls -la | less

Чтобы раскраска не терялась, нужно установить ее принудительно:

env CLICOLOR_FORCE=yes ls -l | less

или

env CLICOLOR_FORCE=yes ls -l | less -R

если вы не используете алиас из примера выше.

Чтобы всегда по умолчанию использовать раскрашенный вывод ls, добавьте в .cshrc:

setenv CLICOLOR_FORCE yes
Раскрашиваем grep (colored grep)

Чтобы выделить цветом слова, которые нашел grep, можно добавить ключ —color:

grep --color string file.txt

По умолчанию, слова string в выведенных строках будут выделены красным. Изменить цвет можно установив переменную GREP_COLOR:

env GREP_COLOR="1;32" grep word file.txt

Так цвет станет зеленым. Как обычно, настройки можно вписать в .cshrc ;).

Все выше описанное можно применять, например, так:

# ищем слова в файлах
find /home/ -name "*.php*" -exec egrep -i 'base64_de' {} \; -print > base64.txt
# читаем результаты в красивом виде
env GREP_COLOR="1;32" egrep --color=always -i 'base64_de|$' base64.txt | env GREP_COLOR="1;31" egrep --color=always '/home/.*|$' | less -R

$ позволит включить в вывод строки без совпадений, слова в совпавших строках будут раскрашены зеленым, а пути к файлам – в красный.

Небольшой цветной наборчик:

alias grey-grep         "env GREP_COLOR='1;30' grep --color=always"
alias red-grep          "env GREP_COLOR='1;31' grep --color=always"
alias green-grep        "env GREP_COLOR='1;32' grep --color=always"
alias yellow-grep       "env GREP_COLOR='1;33' grep --color=always"
alias blue-grep         "env GREP_COLOR='1;34' grep --color=always"
alias magenta-grep      "env GREP_COLOR='1;35' grep --color=always"
alias cyan-grep         "env GREP_COLOR='1;36' grep --color=always"
alias white-grep        "env GREP_COLOR='1;37' grep --color=always"
N.B.

Если вы используете скрипты в своей консоли (с ее настройками) и насильно раскрасите вывод команд ls и grep, это может привести к нежелательным последствиям и/или ошибкам.

Так же учтите, что раскрашивание файлов приводит к увеличению их размера, т.к. добавляются Escape-последовательности, убедиться в этом можно перенаправив последнюю команду не в less, а в файл:

env GREP_COLOR="1;32" egrep --color=always -i 'base64_de|$' base64.txt | env GREP_COLOR="1;31" egrep --color=always '/home/.*|$' > colored-base64.txt

colored-base64.txt будет большего размера, чем base64.txt.

Добавить комментарий