locate
命令的输出颜色设置为与其他终端文本区分开来。它应该像这样工作:locate -bir pdf | some_command_to_color_the_result
颜色标记不应仅限于 locate
命令:我需要一种通用的解决方案,可以使用管道来为文本着色,例如将其提供给 grep
或 cat
的输出。
如果没有内置的 Linux 命令,欢迎提供任何关于如何创建此类命令的提示。
你可以使用转义序列来改变输出到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 $variable_name;
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
命令。
_Esc_="$( printf '\033' )"
_norm_="${Esc}[0m" #returns to "normal"
_bold_="${Esc}[0;1m" #set bold
_red_="${Esc}[0;31m" #set red
_boldred_="${Esc}[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'
)
正如Jonathan Leffler所建议的,在答案中发表评论:
grep --color
将提供颜色。
1- 我在我的 .bashrc 文件中创建了一个别名
alias color='grep --color .'
2- 那么每当我想要着色管道文本输出时,我就会使用颜色别名,例如:
locate -bir pdf | color
这将把输出颜色变为红色
我更喜欢使用代码高亮工具:
highlight -O xterm256 -S sh
-S sh
代表将输入视为shell脚本语法。
更多信息请查看:http://www.andre-simon.de/
我通过 ~/.bashrc 将其设置为别名:
有一种更好的方法来实现可定制化着色:
你可以像其他答案中所示使用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。
hl
命令:git clone http://github.com/mbornet-hl/hl
and on :
http://www.flashnux.com/notes/page_000022_US.html
hl
是一个用C语言编写的Linux命令,专门设计用于给文本文件或命令输出着色。您可以同时使用多达42种颜色,并使用配置文件简化命令行。您可以给可以传输到另一个命令的每个命令的输出着色。如果您知道正则表达式,那么使用它将会非常容易。您可以使用手册了解如何使用它。
tput setaf 1; cat /proc/meminfo ; tput setaf 9
grep --color '.'
会以某种颜色显示所有内容(我尝试时是红色)。 - Jonathan Leffleregrep --color '^|regex'
。例如:ps -ef | egrep '^|user1|bash'
显示整个输出,但也将 "user1" 和 "bash" 着色。当然,这会在行首(和正则表达式周围)引入转义码,但如果你使用... | cat
(或... > resultfile
),它们就不会再被着色了(因为没有使用 --color=always),因此不会影响进一步的处理。 - Olivier Dulac