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


246

私はgrepの--colourオプションを頻繁に使用しますが、あまり使用しないこともよくあります。grepの結果をより少なくパイプし、色を維持するにはどうすればよいですか。(またはそれは可能ですか?)

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

編集

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



何を*するの?grepのmanページから:*: The preceding item will be matched zero or more times.しかし、私はまだ理解していません..!@JeremyPowell
Shayan

回答:


274

単純に実行するgrep --colorgrep --color=auto、出力が端末かどうかを検出し、そうであれば色を有効にします。ただし、パイプを検出すると、カラーリングが無効になります。次のコマンド:

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

常に色付けを有効にし、自動検出を無効にしますless。色の強調表示はで行われます。

編集:使用するだけでlessうまくいきますが、おそらく古いバージョンでは、-Rここで提案されているように、色を処理するためのフラグが必要です。


143
あなたは使用する必要がless -Rあまり正確で解釈されるカラー符号化のために
therefromhere

1
それはちょうど私でうまくいきましたがless、バージョンに依存する可能性があります。
drrlvn

1
(願わくば)有用な補遺:いくつかの一致を除外する必要がありましたが、色付けを維持する必要があったので、実際にgrep pattern file | grep -v badpattern | grep --colour=always pattern | less -R私はニーズを完全に満たしました。(再びありがとう!)
オーウェンブラッカー

7
彼らが色処理機能を実装したばかりでless、特別なcolorlessツールを入手する機会を逃したとは信じられません。名前だけでは、それが行われるべきでした!おそらく、バイナリがとして実行されたときに-Rを自動的に起動するパッチを作成する必要がありますcolorless
クリスチャン

2
@OwenBlackerエイリアスではない可能性があります。で$LESS設定した可能性があり-Rます。
-greyfade

27

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

export GREP_OPTIONS="--color=always"

または、次のようなエイリアスを作成します。

alias grepc="grep --color=always"

ここで指摘されているように、の-Rオプションを使用する必要がありますless


29
警告!:GREP_OPTIONS = "-color = always"は、grep(または(e | f)grep)を使用する多くのスクリプトを壊す可能性があります。
-mctylr

4
ええ、単にgrepをエイリアスする方が良いです。常にを使用して純粋にgrepすることもGREP--color手動でオプションを上書きすることもできます。
-asmeurer

これは私には機能しませんが、エイリアスは機能します。
saeedgnu 14

9

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

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

そして、私はちょうどそれをコピーしました/usr/local/bin/g(はい、私はそれをたくさん使います)


2
なぜこの種のことにシェル関数を使用しないのですか?g() { grep --color=always -r "$@" . | less -R }同様に動作し、おそらく(分単位で)パフォーマンスが向上します。
00dani

1
@ 00daniええ、それも有効な代替手段であり、時々それを使用します。この場合、ほとんどの時間はIOに費やされるため、知覚できるほどのパフォーマンスの向上はありません。代わりに、関数を明示的にロードする必要があります
Iazel

1

「grep」のエイリアスを作成しないでください。シェルが使用しない「less」のエイリアスを作成することをお勧めします。あなたの.bashrcちょうど置く: alias less="less -r"


3
まったく正しくありません。との両方 を使用する必要がgrep --color=alwaysありless -Rます。grepは、他のプロセスにパイプされていることのみを知っており、--color=autoオプションはこの情報のみを使用して、色を出力するかどうかを決定することに注意してください。
ブランディッジ

3
lessオプション-rはとは異なることに注意してください-R。おそらく-Rより安全です。
クレイグマックイーン14年

1
それでは、なぜ私のソリューションに反対票を投じるのでしょう。OP lessは、すでに `--color 'オプションを使用している例で具体的に要求します。
not2qubit

3
ここではエイリアスはおそらく望ましくありません。環境変数をlessサポートし$LESSます。そのため、エイリアスの代わりに、export LESS='-R'望ましい場合があります。
-greyfade

0

走る必要がある

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

-rの後にフラグ以下、順番にこれは実行します。


何を*するの?grepのmanページから:*: The preceding item will be matched zero or more times.しかし、私はまだ理解していません..!
シャヤン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.