Colored less, grep and ls

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

или

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

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

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

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

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

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

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

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

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

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

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

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

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

1env 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.

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