あるコマンドの出力をgrep
別のコマンドにパイプしていますgrep
。最初の一致に色が割り当てられるように、最初の項目がgrep
使用されます。--color=always
実際には、2つのカラーコード(たとえば、\033[1;31m
および)の間に一致が含まれていることを意味します\033[0m
。
今の問題は、2番目のパターンがあれば、m
前の一致のカラーコードと一致することです。
echo A B C | grep --color=always A | grep m
同様に、数字も31
一致します。
この問題を解決する方法はありますか?
修正する:
マッチに色を塗る必要があることは言うまでもないので、--color=always
マッチを削除することは私にとって満足のいく解決策ではありません。
ベストアンサー1
を使用しないでくださいgrep --color=always
。そのため、GNU grep
(およびおそらく他のもの)にも別のgrep --color=auto
対応する項目がありますgrep --color
(man grep
)。
--color[=WHEN], --colour[=WHEN]
Surround the matched (non-empty) strings, matching lines,
context lines, file names, line numbers, byte offsets, and
separators (for fields and groups of context lines) with escape
sequences to display them in color on the terminal. The colors
are defined by the environment variable GREP_COLORS. The
deprecated environment variable GREP_COLOR is still supported,
but its setting does not have priority. WHEN is never, always,
or auto.
より詳細に文書化されているものは見つかりませんが、デフォルトでは出力がgrep
ファイル、端末、パイプ、その他であるかどうかを検出し、それに応じて動作します。
$ echo foo | grep --color=always o | grep m
f[01;31mo[m[01;31mo[m
$ echo foo | grep --color=always o >outfile; grep m outfile
f[01;31mo[m[01;31mo[m
上記の比較
$ echo foo | grep --color o >outfile; grep m outfile
$ echo foo | grep --color o | grep m
$
したがって、このauto
オプションを使用すると、デフォルトで表示できる色のみが印刷されます。本当に賢いと魅力のように動作します。私は次のようなものを持っています:
$ type grep
grep is aliased to `grep --color'