grep --colorはANSIコードESC [Kを追加します-これは表示されたテキストを変更する可能性があります


9

grepがANSIコード\e[Kをカラー出力に追加するのはなぜですか?私はそれの要点を見ることができませんが、明らかに開発者は見ることができます。これは、「現在のカーソル位置から行末までの行をクリアするために使用されるANSI / VT100端末コードです。

フリンジの場合、grepは端末のディスプレイからテキストを「消失」させる可能性があります。例えば:

echo -e "ab\rc"
echo -e "ab\rc" |grep --color=always "c"

シンプルなエコー表示されますcbが、色付け表示ショー:c

基礎となるエンコードされたテキストは次のとおりです。echo -e 'ab\r\033[01;31m\033[Kc\033[m\033[K' ただし、\e[Kコードが なければ、echo -e 'ab\r\033[01;31mc\033[m'期待どおりに機能します。

grepがこれらの\e[Kコードを含める理由は何ですか。私はのオーバーレイを可能にするためのスクリプトを書いている二彩色パスのように、: c=--color=always; ls $c /bin/gzip | grep $c 'z'。したがって、grepが使用する理由を理解する必要があります\e[K

回答:


11

この動作は、GREP_COLORS環境変数を設定することで変更できます。

export GREP_COLORS=ne
echo -e "ab\rc" | grep --color=always "c"

grepmanページから:

          ne     Boolean  value  that prevents clearing to the end of line
                 using Erase in Line (EL) to Right  (\33[K)  each  time  a
                 colorized  item  ends.   This  is  needed on terminals on
                 which EL is not supported.  It  is  otherwise  useful  on
                 terminals  for  which  the back_color_erase (bce) boolean
                 terminfo capability  does  not  apply,  when  the  chosen
                 highlight colors do not affect the background, or when EL
                 is too slow or causes too much flicker.  The  default  is
                 false (i.e., the capability is omitted).

それが以前に変更された場合に備えて、最初に行の残りの背景を正しい色に設定します(デフォルトでは変更されていません。誰かが独自の設定でそうするように設定している可能性があります)。

で設定できる他のオプションを試してみることもできますGREP_COLORS。詳細については、manページを参照してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.