Цветной вывод команды Linux

Например, я хотел бы раскрасить вывод команды locate, чтобы ее было легко отличить от текста другого терминала.

Это должно работать примерно так:

locate -bir pdf | some_command_to_color_the_result

Цвет не должен быть ограничен только для команды locate: мне нужно общее решение, которое окрашивает текст с помощью конвейеров, например, подает на него выходные данные grep или cat.

Если нет встроенной команды Linux, любые советы о том, как ее создать, приветствуются.

Ответ 1

norm="$(printf '\033[0m')" #returns to "normal"
bold="$(printf '\033[0;1m')" #set bold
red="$(printf '\033[0;31m')" #set red
boldred="$(printf '\033[0;1;31m')" #set bold, and set red.

somecommand | sed -e "s/someregexp/${boldred}&${norm}/g"  # will color any occurence of someregexp in Bold red

printf "%s" "$red" ; locate something ; printf "%s" "$norm"  # will color output of locate something in red
   #I (ab)use printf "%s" "something", as it more portable than echo,and easy to modify

Существует много других способов (создайте функцию / script, которая может, например, раскрасить регулярное выражение, а затем: somecommand | colorize -c green 'foo.*bar' 'other')

Ответ 2

Вы можете использовать escape-последовательности, чтобы изменить цвет шрифта любого вывода на оболочку bash. Вот некоторые цветовые коды, которые вам понадобятся:

BLACK="\033[30m"
RED="\033[31m"
GREEN="\033[32m"
YELLOW="\033[33m"
BLUE="\033[34m"
PINK="\033[35m"
CYAN="\033[36m"
WHITE="\033[37m"
NORMAL="\033[0;39m"

Как только они определены, вы можете использовать их в обычных командах эха. Например:

echo -e $GREEN this text is green $NORMAL and this is normal

Обратите внимание, что -e не всегда необходимо, но для некоторых ОС (включая osx) требуется для включения escape-последовательностей.

С учетом этих определений вы можете создавать сценарии и каналы для цветного вывода из других команд. Вот полный пример, который я использую для цветного вывода из svn up:

#!/bin/bash

BLACK="\033[30m"
RED="\033[31m"
GREEN="\033[32m"
YELLOW="\033[33m"
BLUE="\033[34m"
PINK="\033[35m"
CYAN="\033[36m"
WHITE="\033[37m"
NORMAL="\033[0;39m"

TMPFILE=.cvsup.tmp

svn up > $TMPFILE
svn status >> $TMPFILE
printf $YELLOW
grep -e ^"\? " -e ^"I " $TMPFILE
printf $GREEN
grep -e ^"R " -e ^"U " -e ^"G " $TMPFILE
printf $BLUE
grep -e ^"M " -e ^"E " $TMPFILE
printf $RED
grep -e ^"C " -e ^"! " -e ^"X " -e ^"~ " $TMPFILE
printf $PINK
grep ^"R " $TMPFILE
printf $PINK
grep ^"D " $TMPFILE
printf $CYAN
grep ^"A " $TMPFILE

printf $NORMAL
rm $TMPFILE

Вы также можете посмотреть tput.

Ответ 3

Как было предложено Джонатаном Леффлером, комментарий опубликован как anwser:

grep --color предоставит цвет

Ответ 4

Я предпочитаю использовать утилиту выделения:

highlight -O xterm256 -S sh

-S sh здесь означает обращение к вводу как синтаксис оболочки script.

Дополнительная информация: http://www.andre-simon.de/

Я установил его как псевдоним через ~/.bashrc: enter image description here

enter image description here

Ответ 5

На мой вопрос ответил следующий вопрос:

1- Я создаю псевдоним в своем .bashrc

alias color='grep --color .'

2- Тогда всякий раз, когда я хочу раскрасить вывод текста конвейера, я использую псевдоним цвета, например:

locate -bir pdf | color

Это приведет к цвету вывода на красный цвет

Ответ 6

Существует намного лучший способ добиться настраиваемой раскраски:

colorit

Вы можете использовать его, как показано в других ответах, через some_command | colorit, но он хорошо настраивается над .coloritrc. У меня есть вещи вроде

dnl  Define some useful color variables
define(`red', `1')
define(`green', `2')
define(`magenta', `5')
dnl
dnl  Mark macro arguments: regexp foreground-color [background-color]
dnl
define(`mark', ``mark "$1"'' `ifelse(`$#', `3', ``"\033[3$2;4$3m"'',
``"\033[3$2m"'')' `"\033[m"')
dnl
divert
mark(`warning', magenta)
mark(`Warning', magenta)
mark(`Traceback', magenta)
mark(`Error', red)
mark(`FAIL', red)
mark(`ERROR', red)
mark(`XFAIL', green)
mark(`ok', green)
mark(`OK', green)
mark(`PASS', green)

и использовать его все время для раскраски вывода компилятора и подобных материалов. Подробнее см. .coloritrc.

Ответ 8

Вы должны взглянуть на команду hl, доступную на git hub:

git clone http://github.com/mbornet-hl/hl

и далее:

http://www.flashnux.com/notes/page_000022_US.html

hl - это команда Linux, написанная на C, специально разработанная для окрашивания текстового файла или вывода команды. Вы можете использовать до 42 цветов одновременно и использовать файл конфигурации для упрощения командной строки. Вы можете раскрасить вывод каждой команды, которая может быть передана другой. И если вы знаете, что такое регулярные выражения, вам будет очень легко пользоваться. Вы можете использовать справочную страницу, чтобы понять, как ее использовать.

Ответ 9

Главный инструмент для этого, конечно, lolcat!

locate -bir pdf | lolcat

enter image description here

Для установки:

sudo apt install lolcat 

См. man lolcat для настройки.