例如,我想为locate
命令的输出着色,以便与其他终端文本轻松区分。
应该是这样的:
locate -bir pdf | some_command_to_color_the_result
着色不应仅限于locate
命令:我需要一个通用解决方案,使用管道为文本着色,例如将其输出grep
或cat
。< / p>
如果没有内置的Linux命令,则可以获得有关如何创建一个的任何提示。
答案 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将其设置为别名:
答案 4 :(得分:2)
以下回答了我的问题:
1-我在.bashrc中创建别名
alias color='grep --color .'
2-然后每当我想为管道文本输出着色时,我都会使用颜色别名,如:
locate -bir pdf | color
这会将输出颜色设为红色
答案 5 :(得分:1)
有一种更好的方法可以实现可自定义的着色:
您可以通过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)
答案 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