关于Unix:语法高亮显示/着色cat

Syntax highlighting/colorizing cat

有没有一种方法可以像grep那样对cat的输出着色?

对于grep,在大多数控制台中,它显示一个突出显示搜索关键字的彩色输出。否则,您可以致电grep --color强制执行。有没有一种通用的方法来根据您的个人选择给任何程序的输出上色?

据我所知,程序本身不负责颜色。它是外壳。

我在freebsd 5.2.1中使用了默认的shell,看起来它从一个时代以来就没有见过颜色。


我从python包python-pygments中推荐pygmentize。您可能需要定义以下方便的别名(除非从ccrypt包中使用ccat)。

1
alias ccat='pygmentize -g'

Syntax highlighted cat output using pygmentize

如果你想要行号:

1
alias ccat='pygmentize -g -O style=colorful,linenos=1'


选项:

Pygmentize很好。我有个别名:

1
alias c='pygmentize -g'

但另一个广受欢迎的选择是

1
alias cats='highlight -O ansi --force'

安装:

您可能需要安装pygments,使用:

1
2
sudo pip install pygments
sudo easy_install Pygments #for Mac user

对于所有发行版都很容易获得的highlight

1
2
sudo apt-get install highlight
sudo yum install highlight
  • BitBucket回购:https://bitback.org/birkenfeld/pygments-main
  • Github镜像:https://github.com/sglyon/pygments

行动中:

我把两张照片都贴在下面,以便在强光下进行比较。

这是pygmentize的行动:Pygmentize highlighting on python file

这是highlightHighlight highlighting on python file


您要寻找的工具可能是supercat(以下是Linux期刊发布的一个快速介绍)。

我意识到这个答案太晚了,而且不能完全满足OP的要求。所以我添加它只是为了参考(它可能对其他寻找如何给文本文件输出着色的人有用)。


vimcat是单文件(shell脚本),运行良好:

http://www.vim.org/scripts/script.php?Script PTId=4325

最新更新时间为2013年12月。提示:您可以通过vimcat -c"set ft="强制进行文件类型识别。


自2018年4月底起:

Bat - A cat(1) clone with syntax highlighting and Git integration.

该项目是一个cat克隆,支持用rust编写的颜色和定制。它不仅提供多主题的语法突出显示,还提供了Git集成。如文件所述:

bat tries to achieve the following goals:

  • Provide beautiful, advanced syntax highlighting
  • Integrate with Git to show file modifications
  • Be a drop-in replacement for (POSIX) cat
  • Offer a user-friendly command-line interface

不用说,这比侏儒化要快得多,面对大文件时不会窒息。

源代码和二进制版本+安装说明可以在Github存储库中找到,也可以与其他程序进行比较。


语法突出显示的cat完全超出范围。cat不是这个意思。如果您只想以某种方式对某些文件的整个内容进行着色(对整个文件使用相同的颜色),可以使用终端转义序列来控制颜色。

下面是一个示例脚本,它将根据文件类型选择颜色(您可以使用类似这样的脚本,而不是直接调用cat):

1
2
3
4
5
6
7
8
9
#!/bin/bash
fileType="$(file"$1" | grep -o 'text')"
if ["$fileType" == 'text' ]; then
    echo -en"\033[1m"
else
    echo -en"\033[31m"
fi
cat $1
echo -en"\033[0m"

上面的(在支持这些转义序列的终端上)将把任何文本文件打印为"粗体",并把任何二进制文件打印为红色。您可以使用strings而不是cat来打印二进制文件,并且可以增强逻辑以使其适合您的需要。


有一个彩色版的猫-CCAT。从https://github.com/jingweno/ccat/获取。

在Linux/Windows/MacOS上安装

它是一个单独的可执行文件,因此要安装它,您可以从https://github.com/jingweno/ccat/releases中解包操作系统的二进制版本,并将ccat二进制文件复制到/usr/local/bin

如果您希望避免使用二进制文件,或者如果您的平台没有二进制文件(例如Raspberry PI等),那么您可以在具有可工作的go开发环境(基于debian的linuxes的apt install golang或基于mac的brew install golang的情况下,交替从源代码编译:

1
go get -u github.com/jingweno/ccat

The ccat binary will be created under your $GOPATH/bin.

通过自制在Mac上安装

1
brew install ccat

cat的别名

ccat代替常规的cat,在~/.bashrc中增加:

1
2
alias cat="ccat $*"
alias cat0="/bin/cat $*" # for cases when you need plain `cat`

ccat是在go中实现的,所以它是一个本地二进制文件,运行速度比基于python的解决方案快得多,比如pygments,pygmentize后面的模块;我没有看到catccat之间有任何明显的速度差异。


source-highlight

也许可以找到GNU发布的有趣的source-highlight:一个不同于highlight的包。

摘自apt-cache show source-highlight

Description-en: convert source code to syntax highlighted document.
This program, given a source file, produces a document with syntax
highlighting.
It supports syntax highlighting for over 100 file formats ...
For output, the following formats are supported: HTML,
XHTML, LaTeX, Texinfo, ANSI color escape sequences, and DocBook

我做了一些别名(cat和pcat,见下文),这是它们的输出

Screen Example

您可以使用安装在Debian上

1
sudo apt-get install source-highlight

并将其作为别名添加,例如在您的.bash_aliases中,使用下面的行。

1
2
alias Cat='source-highlight --out-format=esc -o STDOUT -i'  
Cat myfile.c # or myfile.xml ...

或者你也可以做一个类似的别名(结尾没有-i,这样就可以插入管道了)

1
2
alias PCat='source-highlight --out-format=esc -o STDOUT '
tail myfile.sh | PCat     # Note the absence of the `-i`

在可以从man source-highlight中读取的选项中,-s强调了可以通过命令行选择或强制突出显示,或将此任务留给程序:

-s, --src-lang=STRING source language (use --lang-list to get the complete list). If not specified, the source language will be guessed from the file extension.

--lang-list
list all the supported language and associated language definition file


如果机器中有VIM,最好和最简单的方法是使用vimcat,它与vimpager程序一起提供。

  • 安装Vimpage
    git clone git://github.com/rkitover/vimpager
    cd vimpager
    sudo make install
  • 运行VimCAT:

    vimcat index.html


  • From what I understand, the binary itself is not responsible for the colors. It is the shell.

    < /块引用>

    这不正确。终端只是解释输出到终端的颜色代码。根据其功能,它可以忽略某些格式/颜色代码。

    从手册页上看,似乎cat不支持着色其输出。即使它支持像grep这样的颜色,它在文本文件中应该用什么颜色?语法强调所需的基础语言知识,这些知识不在cat等简单实用程序的范围内。

    如果您的目标是看到突出显示的代码,那么您可以在UNIX平台上尝试更强大的编辑器,如vim、emacs、gedit等。


    在OSX上,只需执行brew install ccat

    网址:https://github.com/jingweno/ccat。与cat类似,但使用语法突出显示内容。内置的围棋。


    以前的问题,只是为了提供我最终使用的解决方案而做的记录。也许这有点老生常谈(可能不是参数的初衷),但是:

    <罢工>别名c grep='grep-c 9000'

    猫科动物cgrep‘snozzberries’< /打击>

    ..grep -C N将在找到的项目上下提供n行上下文。如果大于输入,则包括整个输入。在这种情况下,我们只需确保它比我们要手动查看的任何典型终端输出都大,这通常是突出显示时您要做的。

    编辑:但是,下面由BeniCherniavsky Paskin提出的这个解决方案比较好——它匹配(和突出显示)您要查找的单词或行首(不可突出显示)。最终结果就是你想要的。

    1
    cat whatever | egrep 'snozzberries|$'

    这是我见过的解决这个问题的最好的新方法,谢谢贝尼。


    BAT精确地做到了这一点,它的别名是cat alias cat='bat'


    在这个问题中,建议使用https://superuser.com/questions/602294/is-there-colorizer-utility-that-can-take-command-output-and-colorize-it-accordin grcat/grc工具作为supercat的替代工具。

    GRC和EDOCX1的人(15);它是GRC包的一部分(资料来源):

    grc - frontend for generic colouriser grcat(1)

    grcat - read from standard input, colourise it and write to standard output


    我已经写了一个小脚本来使用pygmentize执行着色。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    colorize_via_pygmentize() {
        if [ ! -x"$(which pygmentize)" ]; then
            echo"package \'Pygments\' is not installed!"
            return -1
        fi

        if [ $# -eq 0 ]; then
            pygmentize -g $@
        fi

        for FNAME in $@
        do
            filename=$(basename"$FNAME")
            lexer=`pygmentize -N "$filename"`
            if ["Z$lexer" !="Ztext" ]; then
                pygmentize -l $lexer"$FNAME"
            else
                pygmentize -g"$FNAME"
            fi
        done
    }

    然后为脚本创建别名。alias cat=colorize_via_pygmentize。也别忘了把它保存在~/.bashrc中。


    如果只需要一个一行程序将cat输出设置为给定的颜色,则可以附加

    alias cat="echo -en 'code' | cat -"

    给你的~/.$(basename $SHELL)rc

    这里有一个颜色代码的gist:https://gist.github.com/chrisopedia/8754917

    我喜欢高强度黄色的'\e[1;93m'。看起来是这样的:enter image description here