В одной старой заметке я рассказывал, как раскрасить вывод 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.