В одной старой заметке я рассказывал, как раскрасить вывод 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 – один и тот же файл:
1 | ls -laio /usr/bin/ less /usr/bin/ more |
Для того, чтобы man был раскрашен в цвета, добавьте в .cshrc строки:
1 | setenv LESS_TERMCAP_mb "^[[01;31m" |
2 | setenv LESS_TERMCAP_md "^[[01;38;5;74m" |
3 | setenv LESS_TERMCAP_me "^[[0m" |
4 | setenv LESS_TERMCAP_se "^[[0m" |
5 | setenv LESS_TERMCAP_so "^[[38;5;246m" |
6 | setenv LESS_TERMCAP_ue "^[[0m" |
7 | setenv LESS_TERMCAP_us "^[[04;38;5;146m" |
ВНИМАНИЕ: вместо последовательности ^[ нужно вставить ESC-символ, сделать это можно в редакторе ee нажав CTRL+O и введя код 027. Если вы пользуетесь другим редактором, то наверняка и там найдете способ ввода специального символа 😉
Цвет выделенного текста можете заменить на тот, что вам нравится. Чтобы не перелогиниваться в консоль для применения новых настроек или не устанавливать переменные вручную, запустите
Раскрашиваем ls (colored ls)
После манипуляций, приведенных в старой заметке, ls уже выводит каталоги и имена файлов раскрашенными, но при передаче вывода, например, less, вся раскраска отключается:
Чтобы раскраска не терялась, нужно установить ее принудительно:
1 | env CLICOLOR_FORCE= yes ls -l | less |
или
1 | env CLICOLOR_FORCE= yes ls -l | less -R |
если вы не используете алиас из примера выше.
Чтобы всегда по умолчанию использовать раскрашенный вывод ls, добавьте в .cshrc:
1 | setenv CLICOLOR_FORCE yes |
Раскрашиваем grep (colored grep)
Чтобы выделить цветом слова, которые нашел grep, можно добавить ключ —color:
1 | grep --color string file .txt |
По умолчанию, слова string в выведенных строках будут выделены красным. Изменить цвет можно установив переменную GREP_COLOR:
1 | env GREP_COLOR= "1;32" grep word file .txt |
Так цвет станет зеленым. Как обычно, настройки можно вписать в .cshrc ;).
Все выше описанное можно применять, например, так:
2 | find /home/ -name "*.php*" - exec egrep -i 'base64_de' {} \; -print > base64.txt |
4 | env GREP_COLOR= "1;32" egrep --color=always -i 'base64_de|$' base64.txt | env GREP_COLOR= "1;31" egrep --color=always '/home/.*|$' | less -R |
$ позволит включить в вывод строки без совпадений, слова в совпавших строках будут раскрашены зеленым, а пути к файлам – в красный.
Небольшой цветной наборчик:
1 | alias grey- grep "env GREP_COLOR='1;30' grep --color=always" |
2 | alias red- grep "env GREP_COLOR='1;31' grep --color=always" |
3 | alias green- grep "env GREP_COLOR='1;32' grep --color=always" |
4 | alias yellow- grep "env GREP_COLOR='1;33' grep --color=always" |
5 | alias blue- grep "env GREP_COLOR='1;34' grep --color=always" |
6 | alias magenta- grep "env GREP_COLOR='1;35' grep --color=always" |
7 | alias cyan- grep "env GREP_COLOR='1;36' grep --color=always" |
8 | alias white- grep "env GREP_COLOR='1;37' grep --color=always" |
N.B.
Если вы используете скрипты в своей консоли (с ее настройками) и насильно раскрасите вывод команд ls и grep, это может привести к нежелательным последствиям и/или ошибкам.
Так же учтите, что раскрашивание файлов приводит к увеличению их размера, т.к. добавляются Escape-последовательности, убедиться в этом можно перенаправив последнюю команду не в less, а в файл:
1 | 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.