web-dev-qa-db-ja.com

grepからlessへのパイプを使用すると色付きの結果が得られる

私はgrepの--colourオプションをよく使いますが、あまり使わないこともよくあります。どうやってgrepの結果を少なくしても色付けを維持することができますか。 (またはそれは可能ですか?)

grep "search-string" -R * --colour | less 

EDIT

私は直接的な解決策またはこれと同等のものを探しています。

242
Jeremy Powell

単にgrep --colorを実行すると、出力が端末であるかどうかを検出し、そうであれば色を有効にするgrep --color=autoを意味します。ただし、パイプを検出すると色付けは無効になります。次のコマンド

grep --color=always -R "search string" * | less

常に色付けを有効にして自動検出を無効にすると、色の強調表示がlessになります。

編集:ちょうどlessを使うのは私にはうまくいきますが、おそらく古いバージョンでは色を扱うために-Rフラグが必要です。

269
drrlvn

これを.bashrcファイルに入れることができます。

export GREP_OPTIONS="--color=always"

または、このようなエイリアスを作成してください。

alias grepc="grep --color=always"

そしてここで指摘されているように、あなたはlessに対して-Rオプションを使う必要があるでしょう。

27

このような場合、私は実際に小さなshファイルを作成して/usr/local/binに置くことを好みます。
私は通常grepに再帰的にpwdを使うので、私の個人用スクリプトはこうなります:

#!/bin/sh
grep --color=always -r "$@" . | less -R

そしてそれを/usr/local/bin/gとしてコピーしただけです(はい、私はそれをたくさん使います)

8
Iazel

"grep"にエイリアスを付けないでください。シェルでは使用されない "less"のエイリアスにしてください。あなたの.bashrcalias less="less -r"を入れるだけです。

1
not2qubit

走る必要がある

grep --color=always -R "search string" * | less - r

これを実行するためには、 - rフラグの後にlessを付けます。

0