1.grep の通常の出力
grep で色付けで検索すると、通常は、検索語が赤色表示される。また行番号は緑色表示される。
例えばこんなファイルがあったとする。
$ cat ~/test.txt
aaa abc
bbb abc
ccc abc
ddd
eee
このファイルに対して abcが含まれる行を行番号付きで、しかもカラー表示されるよう検索すると、行番号は緑、検索語は鮮やかな赤で表示される。
$ grep -n –color=auto abc ~/test.txt
1:aaa abc
2:bbb abc
3:ccc abc
でも、検索語は自分でわかっているし、長文でない限りただただ眩しいだけである。行番号の区切り文字:は緑色の上に、検索結果が複数行に渡って表示される場合には、行の識別子にもなっているのでこれはこれでありかなと思った。
だから、検索語の赤ハイライト表示をやめたい。でも行番号の緑表示は残したい。こんなときどうするか。
2.grep のオプション
$ grep –help
Usage: grep [OPTION]… PATTERNS [FILE]…
Output control:
-n, –line-number print line number with output lines
–line-buffered flush output on every lineContext control:
-NUM same as –context=NUM
–color[=WHEN],
–colour[=WHEN] use markers to highlight the matching strings;
WHEN is ‘always’, ‘never’, or ‘auto’
該当するところだけ抜書したが、色表示に関する記述は最後の行である。
そして設定できる値は、always,never,auto だけである。
never はカラー表示しない。always と auto は 色表示するが、always の場合は、sort などのパイプ処理後にも有効であるが、auto は grep 自体の処理内だけで有効である。
それでは色そのものは変更できないの?
3.GREP_COLOR、 GREP_COLORS変数
(1)GREP_COLOR 検索語の色(デフォルト赤)を変更する変数
$ export GREP_COLOR=”x;yz”
参考:指定できるカラーは6.1. Colours
例えば、検索語を通常のホワイトに戻す設定は、上記GREP_COLOR=”1;37″とすることで同じ結果が出せる。
1:aaa abc
検索語が白く表示されるが背景と相まって見にくくなるため、ボールド表示にとどめてある。
2:bbb abc
3:ccc abc
(2)GREP_COLORS カラー表示する部分を変更する変数
行番号だったらどうするか?
行番号だったら “ln=x:yz” で設定する。
$ export GREP_COLORS=”ln=1;35″
1:aaa abc
2:bbb abc
3:ccc abc
このようにGREP_COLORS変数は、カラー表示をどこにするのかを指定できる。
参考:2.2 Environment Variables[1]
[1] オプションのGoogle翻訳の結果は、以下のとおり。
▶ GREP_COLOR
この変数は、一致した(空でない)テキストを強調表示するために使用する色を指定します。
GREP_COLORSが推奨されていますが、依然としてサポートされています。
GREP_COLORSの ‘mt’、 ‘ms’、 ‘mc’の機能が優先されます。
それは、一致する行(-vコマンド行オプションが省略されている場合は選択行、-vが指定されている場合はコンテキスト行)内の一致している空でないテキストを強調表示するために使用される色のみを指定できます。
デフォルトは’01; 31 ‘です。これは端末のデフォルトの背景に太い赤色の前景色を意味します。▶ GREP_COLORS
この変数は、出力のさまざまな部分を強調表示するために使用される色やその他の属性を指定します。
その値は、デフォルトで ‘ms = 01; 31:mc = 01; 31:sl =:cx =:fn = 35:ln = 32:bn = 32:se = 36’というコロン区切りのterminfo機能のリストです。 ‘rv’および ‘ne’ブール値の機能は省略されています(つまり、false)。 サポートされる機能は次のとおりです。
4.まとめ
GREPのオプションとそのカラー指定方法の関係をまとめてみました。
grep option | GREP_COLORS 設定(デフォルト値) | |
ファイル名の表示 | -l | fn=35 |
検索語の表示 | mt=1;31 | |
行番号の表示 | -n | 番号は ln=32 番号と行の間の区切り文字は bn=32 |
前後行の表示 | -c | 前後行の区切り文字 se=36 |
コメント