の出力に色を付けるcat
方法grep
はありますか?
の場合grep
、ほとんどのコンソールでは、検索されたキーワードを強調表示する色付きの出力が表示されます。それ以外の場合は、grep --color
個人の選択に応じて任意のプログラムの出力に色を付ける一般的な方法はありますか?
私が理解していることから、プログラム自体は色に責任がありません。シェルです。
私はFreeBSD 5.2.1のデフォルトのシェルを使用しています。これは、エポック以来色を見たことがないようです。
の出力に色を付けるcat
方法grep
はありますか?
の場合grep
、ほとんどのコンソールでは、検索されたキーワードを強調表示する色付きの出力が表示されます。それ以外の場合は、grep --color
個人の選択に応じて任意のプログラムの出力に色を付ける一般的な方法はありますか?
私が理解していることから、プログラム自体は色に責任がありません。シェルです。
私はFreeBSD 5.2.1のデフォルトのシェルを使用しています。これは、エポック以来色を見たことがないようです。
回答:
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
呼び出しを、$cmd
2つの引数がある場合は$ 1、1つしかない場合はデフォルトとして初期化される呼び出しで置き換えることができます。次に、単に次のように記述しますcolorful.sh grep file
。
pygmentize
は色を付けることができません。任意のヒント?
私pygmentize
はpythonパッケージからお勧めしますpython-pygments
。次の便利なエイリアスを定義することもできます(ccat
ccryptパッケージから使用する場合を除く)。
alias ccat='pygmentize -g'
行番号が必要な場合:
alias ccat='pygmentize -g -O style=colorful,linenos=1'
highlight
コマンドを使用することです。alias ccat='highlight -O ansi'
alias dog='pygmentize -g'
犬は猫よりもクールなので、私はそれをとしてエイリアス化しました!
#!/bin/bash \n pygmentize -g $1 | less -R
nyancat
。
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
動作しています:
そしてこれはhighlight
:
highlight
おかげで、私のニーズにうまく機能し、簡単にインストールされました 拡張子のないファイル(.bash_aliasesなど)を表示する場合--syntax=bash
は、に追加し-O ansi
て強制的に実行します。
highlight
そのpythonプログラムより34倍高速です。古典的な言語の力は強いままです。
highlight
、--force
エイリアスに追加する必要があります。そうしないと、理解できないファイル形式に対してエラーがスローされますが、cat
代わりに、強調表示なしで出力を表示したい場合--force
があります。まとめ:alias cat="highlight -O ansi --force"
-O ansi
、デフォルトを追加する必要がありますhtmlを出力することです:-)
2018年4月下旬以降:
Bat-構文強調表示とGit統合を備えたcat(1)クローン。
このプロジェクトは、Rustで書かれた色とカスタマイズをサポートする猫のクローンです。複数のテーマによる構文の強調表示だけでなく、Gitの統合も提供します。ドキュメントに記載されているように:
バットは以下の目標を達成しようとします:
- 美しく高度な構文強調表示を提供する
- Gitと統合してファイルの変更を表示する
- (POSIX)猫のドロップイン置き換えになる
- ユーザーフレンドリーなコマンドラインインターフェースを提供します
言うまでもなく、これはpygmentizeよりもはるかに高速で、大きなファイルに直面しても窒息しません。
ソースコードとバイナリリリース + インストール手順は、Githubリポジトリにあります。また、代替プログラムとの比較もできます。
bat
がデフォルトでインタラクティブモードのままであるということです。より動作するようcat
にするには、-pp
引数を付けて使用します。のようなエイリアスalias cat="bat -pp"
は、おそらく人々が探しているものです。
vimcat
単一ファイル(シェルスクリプト)であり、適切に機能します。
http://www.vim.org/scripts/script.php?script_id=4325
最後の更新は2013年12月からです。ヒント:によってファイルタイプの認識を強制できますvimcat -c "set ft=<type>"
。
~/.vimrc
ため、編集(vim)と印刷(vimcat)の両方で構文の強調表示が同じになることです。vimcatの更新バージョンがで見つけることができることに注意してくださいvimpagerのrepositiory。
vimpager
私のvim colorchemeを使用しません。
vimcat
(1〜2秒の実行時間)はpymentize
(〜200ms)よりはるかに遅く、highlight
(〜20ms)は(〜2ms)よりはるかに遅いですcat
。一方、vimcat
より多くの種類のファイルを処理し、より正確であるhightlight
とpygmentize
、それが速く最初よりはまだですvim
、その後:q
。だから、この特定のタスクの私の選択を獲得します。
あなたが探しているツールはおそらくスーパーキャットです(ここにLinux Journalが公開した簡単な紹介があります)。
この回答は遅れており、OP要件を完全には満たしていないことを理解しています。参考までに追加します(テキストファイルの出力に色を付ける方法を探している他の人にとって役立つ場合があります)。
cat- ccatのカラーバージョンがあります。https://github.com/jingweno/ccat/から入手してください。
これは単一のスタンドアロン実行可能ファイルであるため、インストールする場合は、https://github.com/jingweno/ccat/releasesからOSのバイナリバージョンを解凍し、ccatバイナリをにコピーできます/usr/local/bin
。
バイナリを避けたい場合、またはプラットフォームにバイナリがない場合(例:raspberry piなど)、go
開発環境が稼働している場合(apt install golang
debianベースのlinuxまたはbrew install golang
mac)にソースからコンパイルすることもできます。
go get -u github.com/jingweno/ccat
ccat
バイナリは、あなたの下に作成されます$GOPATH/bin
。
brew install ccat
cat
通常のものcat
をccat
アドインに置き換えるには ~/.bashrc
:
alias cat="ccat $*"
alias cat0="/bin/cat $*" # for cases when you need plain `cat`
ccat
はGoで実装されているため、背後のモジュールであるpygmentsなどのPythonベースのソリューションよりもはるかに高速に実行されるネイティブバイナリpygmentize
です。私は間の顕著な速度差見ていなかったcat
としますccat
。
brew install ccat
それで十分だと思われ、brew tap
もう必要はありません。
あなたのマシンにvimがある場合、それを行うための最良の方法と最も簡単な方法vimcat
は、vimpager
プログラムに付属しているを使用することです。
git clone git://github.com/rkitover/vimpager
cd vimpager
sudo make install
vimcatを実行します。
vimcat index.html
highlight
よりも遅いと3倍bat
私のマシンで30行のbashスクリプトのために。
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サポートされているすべての言語と関連する言語定義ファイルを一覧表示します
less
にsource-highlight
、上の誰かのGitHubは答えを与える:export LESSOPEN="| source-highlight -f esc -i %s -o STDOUT"
とexport LESS=" -R "
。pygmentize
が利用できず、インストールできない場合に非常に役立ちます。
私が理解していることから、バイナリ自体は色に責任がありません。シェルです。
不正解です。端末は、端末に出力されるカラーコードを解釈するだけです。その機能によっては、特定のフォーマット/カラーコードを無視できます。
manページからは、catが出力のカラーリングをサポートしていないようです。grepのような色付けをサポートする場合でも、テキストファイルで何を色付けすればよいですか?構文の強調表示には、catのような単純なユーティリティの範囲外である基礎となる言語の知識が必要です。
強調表示されたコードを確認することが目的であれば、UNIXプラットフォームでvim、emacs、geditなどのより強力なエディターを試すことができます。
cat
行番号付きのファイルを印刷するためではなく、複数の空白行を圧縮するためではなく、印刷されないASCII文字を調べるためではなく、ファイルを連結するためです。」– UNIXスタイル、またはcat -vは有害と見なされます。
OSXでは単に行いますbrew install ccat
。
https://github.com/jingweno/ccat。catに似ていますが、構文を強調表示してコンテンツを表示します。Goに組み込まれています。
バットはそれを正確に行い、猫にエイリアスすることができますalias cat='bat'
古い質問、私が最終的に使用したソリューションを提供するために記録に答えるだけです。おそらくこれは少しハックです(おそらくパラメータの本来の意図ではありません)。
エイリアスcgrep = 'grep -C 9000'
猫は何でも| cgrep 'snozzberries'
.. grep -C N
は、見つかったアイテムの上下にN行のコンテキストを提供します。入力よりも大きい場合は、入力全体が含まれます。この場合は、手動で確認する必要のある一般的な端末出力よりも大きいことを確認します。これは通常、強調表示する場合に実行することを目的としています。
編集: ただし、以下のBeni Cherniavsky-Paskinによって提案されたこのソリューションは優れています-探している単語または行の先頭(強調表示不可)のいずれかに一致(および強調表示)します。最終結果はまさにあなたが望むものです。
cat whatever | egrep 'snozzberries|$'
それは、その問題に対して私が見た新しい最良の解決策です、Beniに感謝します。
egrep 'snozzberries|$'
を使用して色付けを実行する小さなスクリプトを記述しました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つのライナーでcat
出力を特定の色に設定するだけの場合は、
alias cat="echo -en 'code' | cat - "
あなたに ~/.$(basename $SHELL)rc
ここにカラーコードの要点があります:https://gist.github.com/chrisopedia/8754917
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
代替手段になることもあります。