【问题标题】:Color Linux command output [duplicate]彩色Linux命令输出[重复]
【发布时间】:2014-01-21 11:51:52
【问题描述】:

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

它应该像这样工作:

locate -bir pdf | some_command_to_color_the_result

着色不应仅限于 locate 命令:我需要一个使用管道为文本着色的通用解决方案,例如将 grepcat 的输出提供给它。

如果没有内置的 Linux 命令,欢迎提供有关如何创建命令的任何提示。

【问题讨论】:

  • grep --color 将提供颜色
  • 这取决于你想要什么颜色,但grep --color '.' 会给你一些颜色(当我尝试它时是红色)。
  • 这回答了我的问题。我创建了一个别名“alias color='grep --color .”,然后像“locate -bir pdf | color”一样使用它
  • @PeterMortensen 您建议的目标是 C++。这是一个 bash 问题。

标签: linux bash


【解决方案1】:

您可以使用转义序列来更改任何输出到 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】:
    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'

    【讨论】:

      【解决方案3】:

      主要的工具当然是lolcat

      locate -bir pdf | lolcat
      

      安装:

      sudo apt install lolcat 
      

      有关自定义,请参阅 man lolcat

      【讨论】:

      • 正是我正在寻找的,谢谢!
      【解决方案4】:

      根据 Jonathan Leffler 的建议,将评论作为 anwser 发布:

      grep --color 将提供颜色

      【讨论】:

        【解决方案5】:

        以下回答了我的问题:

        1- 我在我的 .bashrc 中创建了一个别名

        alias color='grep --color .'
        

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

        locate -bir pdf | color
        

        这会将输出着色为红色

        【讨论】:

          【解决方案6】:

          我更喜欢使用高亮工具:

          highlight -O xterm256 -S sh
          

          -S sh 这里表示将输入视为 shell 脚本语法。

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

          我通过 ~/.bashrc 将它设置为别名:

          【讨论】:

            【解决方案7】:

            有一种更好的方法来实现可定制的颜色:

            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】:

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

              【讨论】:

                【解决方案9】:

                你应该看看 git hub 上的hl 命令:

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

                然后:

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

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

                【讨论】:

                  【解决方案10】:

                  使用 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
                  

                  【讨论】:

                    猜你喜欢
                    • 2021-04-20
                    • 2010-10-08
                    • 2016-09-15
                    • 2012-06-26
                    • 2019-08-17
                    • 1970-01-01
                    • 2016-09-20
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多