是否有一种方法为cat的输出着色,就像grep那样。

对于grep,在大多数控制台中,它会显示一个彩色输出,突出显示搜索的关键字。否则,你可以通过调用grep——color来强制执行 是否有一种通用的方法来根据您的个人选择为任何程序的输出着色。

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

我正在使用FreeBSD 5.2.1中的默认shell,它看起来像从epoch以来从未见过颜色。


当前回答

据我所知,二进制本身并不负责颜色。它是壳。

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

从手册页来看,cat似乎不支持对输出进行着色。即使它像grep一样支持上色它在文本文件中应该给什么上色呢?语法突出显示所需的底层语言知识,这不在简单实用程序(如cat)的范围内。

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

其他回答

2018年4月底起:

Bat -一个带有语法高亮显示和Git集成的猫(1)克隆。

该项目是一个cat克隆,支持用Rust编写的颜色和自定义。它不仅提供了多个主题的语法高亮显示,还提供了Git集成。如文档所述:

Bat努力实现以下目标: 提供漂亮、高级的语法高亮显示 与Git集成以显示文件修改 是(POSIX)猫的临时替代品 提供用户友好的命令行界面

不用说,它比pygmentize快得多,并且在面对大文件时不会阻塞。

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

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

alias ccat='pygmentize -g'

如果你想要行号

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

向~/添加上述命令中的一个。bash_别名永久生效

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

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
}

然后为脚本创建一个别名。别名猫= colorize_via_pygmentize。另外,不要忘记将其保存在~/.bashrc中。

有彩色版本的猫(他们的名字很难谷歌,除非你附加寻呼机和github或猫的替代品)。

bat[锈痕]https://github.com/sharkdp/bat (actively维护) ccat [golang] https://github.com/jingweno/ccat/

bat和ccat都是本地二进制文件,几乎和/bin/cat一样快,不像基于python的解决方案,比如pygmentze。

安装蝙蝠

MacOS: brew install bat Linux: apt install bat Windows: choco install bat 二进制文件:https://github.com/sharkdp/bat/releases 从源代码构建:货物安装—锁定蝙蝠(需要货物,生锈的构建工具)

更多操作系统请参见https://github.com/sharkdp/bat#installation

安装 ccat

获取Linux/Windows/macOS的二进制文件,例如将ccat复制到/usr/local/bin。 Mac: brew install ccat

如果你的平台没有二进制文件(例如树莓派等),那么你可以从源代码安装(需要golang环境):

go get -u github.com/jingweno/ccat

# NOTE: as of Go 1.18 instead of 'go get xyz' use 'go install xyz', e.g.
go install github.com/jingweno/ccat@latest

混叠到猫

bat的ootb配置显示行号,并进行分页,这是我不需要的,所以我用别名禁用了我不想要的功能:

加上你的~/。bashrc(~(/。zshrc等):

alias cat="bat --paging=never -pp --style='plain' --theme=TwoDark $*"

美国小妞ccat:

alias cat="ccat $*"

在你需要纯猫的情况下,你仍然可以通过绝对路径调用它:

/bin/cat /etc/hosts

这个问题非常古老,但我还是无意中发现了它。为了完整起见,问题是“是否有一种方法让cat对其输出进行着色?”是的,对于ansi编码的输出,你可以将这些导出添加到你的.bashrc:

# colorful less output
export LESS_TERMCAP_mb=$'\e[1;32m'
export LESS_TERMCAP_md=$'\e[1;32m'
export LESS_TERMCAP_me=$'\e[0m'
export LESS_TERMCAP_se=$'\e[0m'
export LESS_TERMCAP_so=$'\e[01;33m'
export LESS_TERMCAP_ue=$'\e[0m'
export LESS_TERMCAP_us=$'\e[1;4;31m'

这将使ansi编码文本的输出上色,如terraform plan:

然而,这与bat不同,bat可以更好地解析json,显示行号,通常用户体验更好。