web-dev-qa-db-ja.com

GNU grepを使用して一致を強調表示するにはどうすればよいですか?

一部のLinuxで、grepが一致を強調表示し、一致するファイルを出力するように構成されていることを確認しました。

一致を強調表示するようにgrepを構成するにはどうすればよいですか?

18
elmarco
alias cgrep='grep -nR --color'

使用法:

$ cgrep somestring /path/to/dir/or/file/with*/possible/*wild.card

また、私のお気に入りの1つ:

$ pgrep some-hanging-process

次の状況で使用できるsome-hanging-processの名前に一致するプロセスのすべてのpidが一覧表示されます。

$ kill $(pgrep some-hanging-process)
11
Eimantas

Grepをpimpする最良の方法は、 ack を使用することであることがわかりました。これは、本質的に、インテリジェントな無視リストを備えた再帰的なgrepです(たとえば、.svnディレクトリを検索しない、バックアップファイルを無視するなど)。 )、結果の色の強調表示とPerl正規表現。これは、grepに98.6%の時間で実行させたいことです。

19
Kai

エイリアスを使用してgrepを再定義する代わりに、これを.bashrcで設定します。

    export GREP_OPTIONS="--color=auto"

私にとって、これはLinux、MacOSX、FreeBSDで動作します。

7

環境変数GREP_OPTIONSは避けることをお勧めします。これは、他のツールに埋め込まれているものも含め、grepのすべての呼び出しに影響します。それらのツールがgrepが一方向に動作することを期待していて、その動作を変更すると、それらのツールは壊れます。

代わりに、うまく機能するエイリアスを作成できます。これは、インタラクティブシェルからのgrepの呼び出しにのみ影響します(つまり、自分で入力した場合)。

私が最も気に入っている最後のオプションは、grepを呼び出すラッパースクリプトを作成することです。他のプログラムからこのラッパーを呼び出すことができるので、エイリアスよりもこれを好みます。例えば。 vimでvimgrepを設定して、vim内からの検索がコマンドラインでの検索と同じように動作するようにします。

$ cat `which grp`
#!/usr/bin/env bash
grep -rI --color --exclude-dir=\.bzr --exclude-dir=\.git --exclude-dir=\.hg --exclude-dir=\.svn --exclude-dir=build --exclude-dir=dist --exclude=tags $*

以下を使用してこれを呼び出します。

$ grp pattern dir

例えば.

$ grp pattern .

現在のディレクトリとサブディレクトリにあるすべてのテキストファイルで「pattern」のインスタンスを検索します。

スクリプトを「grep」ではなく「grp」と呼んでいることに注意してください。これにより、カスタマイズしたデフォルトでgrepを呼び出しているかどうかを常に認識できます。

デフォルトでは、次のものが含まれます。

-r : search subdirs recursive
-I : skip binary files
--color : highlight matches in color
--exclude-dir : skip specified directories and their subdirs
--exclude : skip specified files

私は誰もがソース管理dirsをスキップしたいと思うと思います:.hg .git .bzr .svn

'build'と 'dist'をスキップすることはPython主義であり、おそらくほとんどの人には当てはまりません。間違いなく、あなたは仕事をしながらあなた自身の特異性を発達させるでしょう。

「tags」はctagsの出力であり、vimなどのツールで「gotofunctiondefinition」などに使用します。そのため、ソースコードのすべての単語と記号のコピーが少なくとも1つ含まれているため、検索結果からスキップする価値があります。

最後の「$ *」は「およびコマンドラインからの他のすべてのパラメーター」のbash構文であるため、パターンとdirを渡して通常どおり検索し、他のコマンドラインフラグをオーバーライドできます。 。

3

--colorオプションについてはすでに何度か言及されていますが、環境変数を使用して一致が強調表示される色を構成できることを追加したいと思います。

export GREP_COLOR="1;33"

参照用に、色はANSIカラーコードを使用してエンコードする必要があります

Black       0;30     Dark Gray     1;30
Blue        0;34     Light Blue    1;34
Green       0;32     Light Green   1;32
Cyan        0;36     Light Cyan    1;36
Red         0;31     Light Red     1;31
Purple      0;35     Light Purple  1;35
Brown       0;33     Yellow        1;33
Light Gray  0;37     White         1;37
2
Adam Byrtek

実際に色を設定する例は見当たらないので、GNU grep:

# turn on colors, natch.
export GREP_OPTIONS="--color=auto"

if [[ $(echotc Co) -ge 256 ]]; then
  # 256 color terminals
  export GREP_COLORS="mt=38;5;118:sl=:cx=:fn=38;5;18:ln=1;30:bn=37:se=30"
else
  # everybody else
  export GREP_COLORS="mt=31:sl=:cx=:fn=34:ln=1;30:bn=30:se=30"
fi

GREP_OPTIONSに注意してください。 --color=autoのような目的以外には使用しないでください。使用すると、システムでgrepを使用するスクリプトが台無しになります。

2
docwhat