web-dev-qa-db-ja.com

構文の強調表示/色付け猫

catのように、grepの出力を色付けする方法はありますか。

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

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

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

177

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

22
Costi Ciudatu

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

alias ccat='pygmentize -g'

Syntax highlighted cat output using pygmentize

また、行番号が必要な場合:

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

オプション:

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

alias c='pygmentize -g'

しかし、highlightは別の広く利用可能な代替手段です

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が動作中です。 Pygmentize highlighting on python file

これはhighlightです: Highlight highlighting on python file

105

2018年4月下旬以降:

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

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

batは次の目標を達成しようとします

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

言うまでもなく、pygmentizeよりもはるかに高速であり、大きなファイルに直面したときに詰まらない。

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

33
dangom

お探しのツールは、おそらく supercat (Linux Journalが公開している クイックイントロダクション です)。

この答えは遅れており、OPの要件を完全には満たしていないことがわかります。参照用に追加するだけです(テキストファイルの出力を色付けする方法を探している他の人に役立つかもしれません)。

31
mfriedman

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

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

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

29
Soergener

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 golang debianベースのLinuxでは_、Macではbrew install golang):

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の背後にあるモジュールです。 catccatの間に顕著な速度差は見られませんでした。

20
ccpizza

マシンにvimがある場合の最善の方法と最も簡単な方法は、vimcatプログラムに付属のvimpagerを使用することです。

  1. git clone git://github.com/rkitover/vimpager cd vimpager Sudo make installを使用してvimpageをインストールします
  2. Vimcatを実行します。

    vimcat index.html

11
Amaynut

source-highlight

面白いsource-highlightを見つけることができるかもしれません GNUでリリースhighlightとは異なるパッケージ。

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

Description-en:ソースコードを構文強調されたドキュメントに変換します。
このプログラムは、ソースファイルを指定すると、構文が強調表示されたドキュメントを生成します。
100を超えるファイル形式の構文強調表示をサポートしています...
出力では、HTML、XHTML、LaTeX、Texinfo、ANSIカラーエスケープシーケンス、DocBookの形式がサポートされています。

いくつかのエイリアス(CatとPCat、以下を参照)を実行しました。これはそれらの出力です

Screen Example

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を付けずに、pipe in)する可能性があります)

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

man source-highlightから読み取ることができるオプションの中には、選択可能な下線-sまたはforce、コマンドラインによる強調表示、またはこの義務をプログラムに任せる:

-s-src-lang= STRINGソース言語(使用--lang-listで完全なリストを取得します)。 指定しない場合、ソース言語はファイル拡張子から推測されます

--lang-listは、サポートされているすべての言語と関連する言語定義ファイルをリストします

11
Hastur

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

それは正しくありません。ターミナルは、ターミナルに出力されるカラーコードを解釈するだけです。その機能に応じて、特定のフォーマット/カラーコードを無視できます。

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

ハイライトされたコードを見ることを目標とする場合、unixプラットフォームでvim、emacs、geditなどのより強力なエディターを試すことができます。

8
Ashwinee K Jha

OSXでは、単にbrew install ccatを実行します。

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

7
joost

bat は正確にそれを行い、cat alias cat='bat'にエイリアスできます。

4

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

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

何でも猫| cgrep 'snozzberries'

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

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

cat whatever | egrep 'snozzberries|$'

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

3
Mr. B

この質問では https://superuser.com/questions/602294/is-there-colorizer-utility-that-c​​an-take-command-output-and-colorize-it-accordingrcat/grcsupercat の代わりにツールが推奨されました。

grc および grcat ;の男 grc packagesources )の一部です:

grc-汎用カラーライザーgrcat(1)のフロントエンド

grcat-標準入力から読み取り、色付けして標準出力に書き込む

2
osgx

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に保存することを忘れないでください。

1
Rohit Sehgal

1つのライナーで特定の色にcat出力を設定する場合は、追加できます

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

~/.$(basename $Shell)rc

これがカラーコードの要点です: https://Gist.github.com/chrisopedia/8754917

私は'\e[1;93m'が好きです。これは高輝度の黄色です。次のようになります。 enter image description here

0
okovko

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
eadmaster