構文強調/猫の色付け


202

の出力に色を付けるcat方法grepはありますか?

の場合grep、ほとんどのコンソールでは、検索されたキーワードを強調表示する色付きの出力が表示されます。それ以外の場合は、grep --color 個人の選択に応じて任意のプログラムの出力に色を付ける一般的な方法はありますか?

私が理解していることから、プログラム自体は色に責任がありません。シェルです。

私はFreeBSD 5.2.1のデフォルトのシェルを使用しています。これは、エポック以来色を見たことがないようです。


私はあなたが何を言おうとしているのか理解できません
ルルーシュ・ランペルージュ

大野。バイナリを表示したくない。バイナリの出力を色分けして表示したいだけです。
ルルーシュランペルージ

6
meh-FTFY (あなたはいつでもあなた自身の質問を編集できます)
sehe

「バイナリ」という用語の混乱を避けるために編集しました
Volker Siegel

3
@buergiの回答は質問と一致すると思います。これは、賛成票の数によってもサポートされます。受け入れられた回答を変更することを検討してください。
イオアニスフィリッピディス2014

回答:


22

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を使用して、バイナリファイルを印刷したり、ロジックを拡張してニーズに合わせることができます。


このようなことを考えていました。しかし、私はそれを普遍的に行う何かが必要です。だけでなく、cat/ grep/any particular program
ルルーシュ・ランペルージ

次に、実行するコマンドを引数としてスクリプトに渡し、ハードコードされたcat呼び出しを、$cmd2つの引数がある場合は$ 1、1つしかない場合はデフォルトとして初期化される呼び出しで置き換えることができます。次に、単に次のように記述しますcolorful.sh grep file
Costi Ciudatu

8
「猫はそのためのものではありません。」Catは、個々のファイルをstdoutに書き込むためのものではありません-連結のためです。しかし、それでも、個々のファイルをstdoutに書き込んでも役に立たないという意味ではありません。強調表示しても役に立たないという意味ではありません。
mikemaccana 2017年

私が試したところ、cygwinの下でpygmentizeは色を付けることができません。任意のヒント?
TruthAdjuster 2018

408

pygmentizeはpythonパッケージからお勧めしますpython-pygments。次の便利なエイリアスを定義することもできます(ccatccryptパッケージから使用する場合を除く)。

alias ccat='pygmentize -g'

pygmentizeを使用して構文が強調表示されたcat出力

行番号が必要な場合:

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

22
別の解決策は、linux highlightコマンドを使用することです。alias ccat='highlight -O ansi'
Evan Purkhiser 2013年

99
これは、私見の受け入れられた答えでなければなりません。それに加えて、alias dog='pygmentize -g'犬は猫よりもクールなので、私はそれをとしてエイリアス化しました!
polym 14

8
あなたは、コードのスクロールを行うことが少なく-Rを追加することができます#!/bin/bash \n pygmentize -g $1 | less -R
はFabricio PH

6
私は自分のエイリアスに電話しましたnyancat
zneak 2015

2
pygmentizeは期待通りに動作しますが、残念ながらかなり遅いようです。:-/
Frerich Raabe 2017

113

オプション:

pygmentizeは良いです。エイリアスがあります:

alias c='pygmentize -g'

しかし、ハイライトは、広く利用可能な別の選択肢です。

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

インストール:

以下pygmentsを使用してインストールする必要がある場合があります。

sudo pip install pygments
sudo easy_install Pygments #for Mac user

そして、highlightすべてのディストリビューションで簡単に入手できるパッケージ

sudo apt-get install highlight
sudo yum install highlight

実行中:

ハイライトを比較するために、下の両方にショットを添付しています

これがpygmentize動作しています: Pythonファイルのハイライトを色素沈着化

そしてこれはhighlightPythonファイルの強調表示を強調表示する


4
highlightおかげで、私のニーズにうまく機能し、簡単にインストールされました 拡張子のないファイル(.bash_aliasesなど)を表示する場合--syntax=bashは、に追加し-O ansiて強制的に実行します。
jerclarke 2016年

1
#ピップインストールPygments#エコー"エイリアスCATC = 'pygmentize -g'" >> "〜/ .bashrcに" #近い端末#開放端子#のCATCのtest.js ---と完璧な作品:-)😊
BGブルーノ

3
highlightそのpythonプログラムより34倍高速です。古典的な言語の力は強いままです。
Avindra Goolcharan

2
の場合highlight--forceエイリアスに追加する必要があります。そうしないと、理解できないファイル形式に対してエラーがスローされますが、cat代わりに、強調表示なしで出力を表示したい場合--forceがあります。まとめ:alias cat="highlight -O ansi --force"
Alexander Klimetschek 2017

1
@Lukeだから-O ansi、デフォルトを追加する必要がありますhtmlを出力することです:-)
Thomas

59

2018年4月下旬以降:

Bat-構文強調表示とGit統合を備えたcat(1)クローン。

このプロジェクトは、Rustで書かれた色とカスタマイズをサポートする猫のクローンです。複数のテーマによる構文の強調表示だけでなく、Gitの統合も提供します。ドキュメントに記載されているように:

バットは以下の目標を達成しようとします

  • 美しく高度な構文強調表示を提供する
  • Gitと統合してファイルの変更を表示する
  • (POSIX)猫のドロップイン置き換えになる
  • ユーザーフレンドリーなコマンドラインインターフェースを提供します

言うまでもなく、これはpygmentizeよりもはるかに高速で、大きなファイルに直面しても窒息しません。

ソースコードとバイナリリリース + インストール手順は、Githubリポジトリにあります。また、代替プログラムとの比較もできます。


5
人々が言及することを忘れているのは、それbatがデフォルトでインタラクティブモードのままであるということです。より動作するようcatにするには、-pp引数を付けて使用します。のようなエイリアスalias cat="bat -pp"は、おそらく人々が探しているものです。
Canella

1
私は以前に猫の色付けにpygmentizeを使用していましたが、batを使用したソリューションは、pygmentizeのパフォーマンスが劣る大きなファイル(数MBのログ)にはるかに適しています。
Christian.D

35

vimcat 単一ファイル(シェルスクリプト)であり、適切に機能します。

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

最後の更新は2013年12月からです。ヒント:によってファイルタイプの認識を強制できますvimcat -c "set ft=<type>"


12
vimcat(またはvimpager)の本当に良い点の1つは、定義したカラースキームを尊重する~/.vimrcため、編集(vim)と印刷(vimcat)の両方で構文の強調表示が同じになることです。vimcatの更新バージョンがで見つけることができることに注意してくださいvimpagerのrepositiory
timss

Amaynutの回答はより古く、類似しています
olibre

vimpager私のvim colorchemeを使用しません。
WhyNotHugo 2017年

2
私の素早い非科学的なテストでは、vimcat(1〜2秒の実行時間)はpymentize(〜200ms)よりはるかに遅く、highlight(〜20ms)は(〜2ms)よりはるかに遅いですcat。一方、vimcatより多くの種類のファイルを処理し、より正確であるhightlightpygmentize、それが速く最初よりはまだですvim、その後:q。だから、この特定のタスクの私の選択を獲得します。
Penghe Geng

1
@olibreこの回答はAmaynutの回答より古いようです。
フランクリンユー

31

あなたが探しているツールはおそらくスーパーキャットです(ここにLinux Journalが公開した簡単な紹介があります)。

この回答は遅れており、OP要件を完全には満たしていないことを理解しています。参考までに追加します(テキストファイルの出力に色を付ける方法を探している他の人にとって役立つ場合があります)。


1
これは簡単に機能しないようです。インストールしてサンプルの設定を使用しましたが、色の効果はありませんでした
rubo77

他のすべてが遅すぎる。これはいい。設定のヘルプについては、manpages.debian.org
testing / supercat / spc.1.en.htmlを

さらに、さまざまな言語の一部の構成:github.com/tanderson92/supercat/tree/master/spcrc
okovko

20

cat- ccatのカラーバージョンがあります。https://github.com/jingweno/ccat/から入手してください

Linux / Windows / macOSへのインストール

これは単一のスタンドアロン実行可能ファイルであるため、インストールする場合は、https://github.com/jingweno/ccat/releasesからOSのバイナリバージョンを解凍し、ccatバイナリをにコピーできます/usr/local/bin

バイナリを避けたい場合、またはプラットフォームにバイナリがない場合(例:raspberry piなど)、go開発環境が稼働している場合(apt install golangdebianベースのlinuxまたはbrew install golangmac)にソースからコンパイルすることもできます。

go get -u github.com/jingweno/ccat

ccatバイナリは、あなたの下に作成されます$GOPATH/bin

Homebrew経由でMacにインストールする

brew install ccat

のエイリアス cat

通常のものcatccatアドインに置き換えるには ~/.bashrc

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

ccatGoで実装されているため、背後のモジュールであるpygmentsなどのPythonベースのソリューションよりもはるかに高速に実行されるネイティブバイナリpygmentizeです。私は間の顕著な速度差見ていなかったcatとしますccat


1
適切なレポ名は何ですか?Ubuntu 16のapt-get ccatは、ある種の暗号化プログラムを提供し、私のprocディレクトリ全体を現在暗号化または復号化しようとしているため、端末を陽気に
ブリックし

@KatasticVoyage:私の悪い点:なんらかの理由でそれがリポジトリにあると思っていましたが、ubuntuボックスにどのように入れたか忘れていました。更新された回答をご覧ください。
ccpizza 2017

2
現在、brew install ccatそれで十分だと思われ、brew tapもう必要はありません。
Jeff Huijsmans 2017年

12

あなたのマシンにvimがある場合、それを行うための最良の方法と最も簡単な方法vimcatは、vimpagerプログラムに付属しているを使用することです。

  1. でvimpageをインストールする git clone git://github.com/rkitover/vimpager cd vimpager sudo make install
  2. vimcatを実行します。

    vimcat index.html


私はこのアイデアが大好きですが、vimcatは遅いものの1つです。色素沈着と同じくらい遅いです。15Xより遅いhighlightよりも遅いと3倍bat私のマシンで30行のbashスクリプトのために。
Ponkadoodle、

11

source-highlight

多分それはsource-highlight GNUの下でリリースされた興味深いものを見つけることが可能です:とは異なるパッケージhighlight

からの抜粋apt-cache show source-highlight

Description-en:ソースコードを構文強調表示されたドキュメントに変換します。
このプログラムは、ソースファイルを指定すると、構文を強調表示したドキュメントを生成します。
100以上のファイル形式の構文強調表示をサポートしています ...
出力では、次の形式がサポートされています: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 ...

または、同様のエイリアスを行うことができます(-i末尾にパイプなしでパイプする可能性がない場合)

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を使用)。 指定しない場合、ソース言語はファイル拡張子から推測されます

--lang-listサポートされているすべての言語と関連する言語定義ファイルを一覧表示します


1
あなたも色付けしたい場合lesssource-highlight、上の誰かのGitHubは答えを与える:export LESSOPEN="| source-highlight -f esc -i %s -o STDOUT"export LESS=" -R "pygmentizeが利用できず、インストールできない場合に非常に役立ちます。
Lalylulelo

8

私が理解していることから、バイナリ自体は色に責任がありません。シェルです。

不正解です。端末は、端末に出力されるカラーコードを解釈するだけです。その機能によっては、特定のフォーマット/カラーコードを無視できます。

manページからは、catが出力のカラーリングをサポートしていないようです。grepのような色付けをサポートする場合でも、テキストファイルで何を色付けすればよいですか?構文の強調表示には、catのような単純なユーティリティの範囲外である基礎となる言語の知識が必要です。

強調表示されたコードを確認することが目的であれば、UNIXプラットフォームでvim、emacs、geditなどのより強力なエディターを試すことができます。


3
cat行番号付きのファイルを印刷するためではなく、複数の空白行を圧縮するためではなく、印刷されないASCII文字を調べるためではなく、ファイルを連結するためです。」– UNIXスタイル、またはcat -vは有害と見なされます。
スコット

7

OSXでは単に行いますbrew install ccat

https://github.com/jingweno/ccat。catに似ていますが、構文を強調表示してコンテンツを表示します。Goに組み込まれています。


いいね。いくつかの言語制限がありますが、それはpygmentsよりもずっと速く感じます。
Gustavo Bezerra 2016年

ccatはArch LinuxのAURリポジトリにもあります。yaourtまたはpacaurを使用してパッケージをインストールします。
マークス


3

古い質問、私が最終的に使用したソリューションを提供するために記録に答えるだけです。おそらくこれは少しハックです(おそらくパラメータの本来の意図ではありません)。

エイリアスcgrep = 'grep -C 9000'

猫は何でも| cgrep 'snozzberries'

.. grep -C Nは、見つかったアイテムの上下にN行のコンテキストを提供します。入力よりも大きい場合は、入力全体が含まれます。この場合は、手動で確認する必要のある一般的な端末出力よりも大きいことを確認します。これは通常、強調表示する場合に実行することを目的としています。

編集: ただし、以下のBeni Cherniavsky-Paskinによって提案されたこのソリューションは優れています-探している単語または行の先頭(強調表示不可)のいずれかに一致(および強調表示)します。最終結果はまさにあなたが望むものです。

cat whatever | egrep 'snozzberries|$'

それは、その問題に対して私が見た新しい最良の解決策です、Beniに感謝します。


2
すべての線を含めながらパターンを強調表示するより堅牢な方法は次のegrep 'snozzberries|$'
とおり


1

を使用して色付けを実行する小さなスクリプトを記述しました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に保存することを忘れないでください。


0

1つのライナーでcat出力を特定の色に設定するだけの場合は、

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

あなたに ~/.$(basename $SHELL)rc

ここにカラーコードの要点があります:https//gist.github.com/chrisopedia/8754917

'\e[1;93m'高輝度の黄色が好きです。次のようになります。ここに画像の説明を入力してください


0

vim とこのvimrcファイルを使用してください。

一発ギャグ:

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 代替手段になることもあります。


0

〜/ .bashrcに配置します

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

その後

ccat filename

WhalebrewはDockerイメージのエイリアスを作成するため、ネイティブコマンドのように実行できます。Homebrewに似ていますが、Dockerイメージが含まれています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.