修正する:

修正する:

あるコマンドの出力を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 --colorman 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'

おすすめ記事