语法高亮/着色猫

是否有方法像grep那样对cat的输出进行着色?

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

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

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

136066 次浏览

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

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

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

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

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

下面是一个示例脚本,它将根据文件类型选择颜色(你可以使用类似的东西来代替直接调用cat):

#!/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来打印二进制文件,你可以增强逻辑使其适合你的需要。

你要找的工具可能是supercat(这里是由Linux Journal发布的简单介绍)。

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

我建议使用python包python-pygments中的pygmentize。你可能想要定义以下方便的别名(除非你使用ccrypt包中的ccat)。

alias ccat='pygmentize -g'

使用pygmentize突出显示cat输出的语法

如果你想要行号

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

将上述命令中的一个添加到~/.bash_aliases中以永久生效

vimcat是单文件(shell脚本),工作良好:

http://www.vim.org/scripts/script.php?script_id=4325 < a href = " http://www.vim.org/scripts/script.php?script_id=4325 " > < / >

最近一次更新是2013年12月。提示:你可以通过vimcat -c "set ft=<type>"强制文件类型识别。

老问题,只是为了提供我最终使用的解决方案而回答记录。也许这有点粗糙(可能不是参数的最初目的),但是:

< p > <罢工> alias cgrep='grep -C 9000'

cat whatever | cgrep 'snozzberries' < /罢工> < / p >

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

然而,下面Beni Cherniavsky-Paskin建议的这个解决方案更优越——它匹配(并突出显示)你正在寻找的单词或行首(不突出显示)。最终的结果正是你想要的。

cat whatever | egrep 'snozzberries|$'

这是我所见过的针对这个问题的最新最佳解决方案,谢谢Beni。

选项:

< >强pygmentize < / >强是好的。我有一个别名:

alias c='pygmentize -g'

但是< >强突出< / >强是另一个广泛可用的替代方法

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

安装:

你可能必须使用以下方法之一来安装pygments:

sudo apt install python-pygments
sudo pip install pygments
sudo easy_install Pygments #for Mac user

highlight包,它在所有发行版上都很容易获得

sudo apt install highlight
sudo yum install highlight

在行动:

我在下面附上了两者的照片,以便在高亮部分进行比较

下面是pygmentize在起作用: Pygmentize highlight on python file

这是highlight: Highlight Highlight on python file

.

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

grcgrcat的人;它是grc包 (来源)的一部分:

GRC -通用着色剂grcat的前端(1)

Grcat -从标准输入读取,着色并写入标准输出

有彩色版本的cat(它们的名称很难谷歌,除非你附加pagergithubcat replacement)。

batccat都是原生二进制文件,几乎和/bin/cat一样快,不像基于python的解决方案,比如pygmentize

安装bat

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

安装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

别名为cat

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

添加到你的~/.bashrc (~/.zshrc等.):

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

ccat:

alias cat="ccat $*"

当你需要普通cat时,你仍然可以通过绝对路径调用它:

/bin/cat /etc/hosts

source-highlight

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

节选自apt-cache show source-highlight:

< p > Description-en: 将源代码转换为语法突出显示的文档。 < br > 给定一个源文件,这个程序将生成一个具有语法的文档 突出。< br > 它支持100多种文件格式的语法高亮显示…< br > 输出支持以下格式:HTML、 XHTML, LaTeX, Texinfo, ANSI颜色转义序列和DocBook

我做了一些别名(Cat和PCat,见下文),这是他们的输出

屏幕示例

你可以安装在Debian的基础上

sudo apt-get install source-highlight

并将其添加为别名,例如在.bash_aliases中添加如下所示的代码。

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

或者你可以做一个类似的别名(没有__abc0在结尾,以便有可能管在)

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源语言(使用——lang-list获取完整的列表)。如果未指定,则将根据文件扩展名猜测源语言

< p >——lang-list 列出所有支持的语言和相关的语言定义文件

在OSX上简单地执行brew install ccat

https://github.com/jingweno/ccat。与cat类似,但显示内容时使用语法高亮显示。内置围棋。

如果你的机器中有vim,最好和最简单的方法是使用vimcat,它附带vimpager程序。

  1. 安装vimage with Git克隆Git://github.com/rkitover/vimpager cd vimpager Sudo make install 李< /代码> < / >
  2. < p > vimcat运行:

    vimcat index.html < / p >

2018年4月底起:

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

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

Bat试图实现以下目标:

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

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

源代码和二进制版本 + 安装说明可以在Github存储库中找到,还有一个与替代方案的比较

我已经编写了使用pygmentize执行着色的小脚本。

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='bat'

如果你只想用一行代码将cat输出设置为给定的颜色,你可以追加

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

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

下面是一个带有颜色代码的要点:https://gist.github.com/chrisopedia/8754917

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

只需使用vim和这个vimrc文件

oneliner:

vim -c '1' -c 'set cmdheight=1' -c 'set readonly' -c 'set nomodifiable' -c 'syntax enable' -c 'set guioptions=aiMr' -c 'nmap q :q!<CR>' -c 'nmap <Up> <C-Y>' -c 'nmap <Down> <C-E>' -c 'nmap ^V <C-F><C-G>' "$@"

nano -v也可以是一个选择。

放置在~/.bashrc中

function ccat() { docker run -it -v "$(pwd)":/workdir -w /workdir whalebrew/pygmentize $1; }

然后

ccat filename

Whalebrew为Docker映像创建别名,以便您可以像运行本机命令一样运行它们。它很像Homebrew,但是有Docker图像。

这个问题非常古老,但我还是无意中发现了它。为了完整起见,问题是“是否有一种方法可以让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: enter image description here < / p >

然而,这与bat不同,后者可以更好地解析json,显示行号,并且通常具有更好的用户体验。

为此,我编写了一个基于rust的小软件。它被命名为highlighter,可以在下面的repo中找到:

https://codeberg.org/mehrad/highlighter

基本上,您只需将前一个命令的输出输出到它中,并告诉它根据您的偏好对其进行着色。例如:

locale | highlighter  --blue="=" --red="_U.*" --yellow "NAME" --green="_ME.*"

如果您认为名称太长,我建议为它创建一个别名。我宁愿取一个较长但有描述性的名字,也不愿取一个短而模糊的名字。