Color Linux命令输出

时间:2014-01-03 18:03:10

标签: linux bash

例如,我想为locate命令的输出着色,以便与其他终端文本轻松区分。

应该是这样的:

locate -bir pdf | some_command_to_color_the_result

着色不应仅限于locate命令:我需要一个通用解决方案,使用管道为文本着色,例如将其输出grepcat。< / p>

如果没有内置的Linux命令,则可以获得有关如何创建一个的任何提示。

10 个答案:

答案 0 :(得分:8)

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's more portable than echo,and easy to modify

还有很多其他方法(例如,创建一个可以为正则表达式着色的函数/脚本,然后:somecommand | colorize -c green 'foo.*bar' 'other'

答案 1 :(得分:6)

您可以使用转义序列将任何输出的字体颜色更改为bash shell。以下是您需要的一些颜色代码:

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命令中使用它们。例如:

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

请注意,-e并不总是必需的,但在某些操作系统(包括osx)上启用转义序列是必需的。

根据这些定义,您可以构建脚本和管道,以便为其他命令的输出着色。这是我用来为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

答案 2 :(得分:4)

根据Jonathan Leffler的建议,评论作为anwser张贴:

grep --color将提供颜色

答案 3 :(得分:3)

我更喜欢使用高亮实用程序:

highlight -O xterm256 -S sh

-S sh这意味着将输入视为shell脚本语法。

更多信息:http://www.andre-simon.de/

我通过〜/ .bashrc将其设置为别名: enter image description here

enter image description here

答案 4 :(得分:2)

以下回答了我的问题:

1-我在.bashrc中创建别名

alias color='grep --color .'

2-然后每当我想为管道文本输出着色时,我都会使用颜色别名,如:

locate -bir pdf | color

这会将输出颜色设为红色

答案 5 :(得分:1)

有一种更好的方法可以实现可自定义的着色:

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

答案 6 :(得分:1)

我认为git hub上提供的hl命令可能会对你有所帮助:
看看http://www.flashnux.com/notes/page_000022_US.html

答案 7 :(得分:1)

您应该查看git hub上可用的hl命令:

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

以及:

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

hl是一个用C语言编写的Linux命令,专门用于为文本文件或命令输出着色。您最多可以同时使用 42种颜色,并使用配置文件来简化命令行。您可以将每个可以通过管道输出到另一个命令的输出着色。如果您知道正则表达式是什么,那么将非常容易使用。您可以使用手册页来了解如何使用它。

答案 8 :(得分:1)

用于此目的的主要工具当然是 lolcat

locate -bir pdf | lolcat

enter image description here

要安装:

sudo apt install lolcat 

有关自定义内容,请参见man lolcat

答案 9 :(得分:0)

使用tput命令。

大多数终端支持8种前景文本颜色和8种背景颜色(尽管有些支持多达256种)。使用setaf和setab功能,我们可以设置前景色和背景色。颜色的精确渲染有点难以预测。许多桌面管理器在终端窗口上强加“系统颜色”,从而根据标准修改了前景色和背景色。尽管如此,以下是颜色:

颜色值

0黑色

1红色

2绿色

3黄色

4蓝色

5洋红色

6青色

7白色

8未使用

9重置为默认颜色

实际示例:将颜色设置为红色,猫色,然后再变回颜色:

tput setaf 1; cat /proc/meminfo ; tput setaf 9