フィルタgrepのカラー出力

フィルタgrepのカラー出力

私はOSXを使用していますが、これは問題に大きな影響を与えないと思います。私は.bash_profile基本的にエイリアスを使ってgrepカラー出力を取得します。

alias grep='grep --color=always'

私は通常、次のような方法でリポジトリ内のファイルの内容を検索します。

grep --include=*.cpp -Ern . -e "(foo|bar)"

しかし、私はしばしばsay for pipingを使用して結果をさらに具体化したいと思いますgrep -v "colorbar"

問題は、2番目のgrepコマンドがカラー出力で実行されるため、除外パターンと一致しないようです。

明らかに、色なしで最初の検索を実行でき、すべてがうまく機能します。しかし、この問題を解決する方法がある場合は、色を維持することをお勧めしますか?

答え1

簡単で明確な答えは次のとおりです。

  1. エイリアスをhasに変更してください--color=autoalways
  2. 必要に応じてgrepコマンドをパイプします。
  3. パイプラインの末尾に追加のgrepコマンドを使用して、目的の結果の色を指定します。たとえば、次のようになります。

    grep --include=*.cpp -Ern . -e "(foo|bar)" | grep -v colorbar | grep -E -e "(foo|bar)"
    

ただし、これにより、ファイル名とファイル番号の色が正しく指定されません。

別の考えられる解決策ははるかに厳しいですが、まだ言及する価値があります。pcregrepよりクールな正規表現を使用して、1つの正規表現ですべてのフィルタリングを処理できます。

答え2

/etc/profile.d/colorgrep* ファイルの削除 os linux の最新バージョンでは、greg/egrep と fgreg のエイリアスを強制的に適用し、ファイルを削除すると正常に戻ります。

関連情報