grep --color ANSIコードESC [Kを追加します - 表示されたテキストが変更されます。

grep --color ANSIコードESC [Kを追加します - 表示されたテキストが変更されます。

\e[Kgrepがカラー出力にANSIコードを追加するのはなぜですか?私はそのポイントを知りませんが、明らかに開発者はできます。これは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'期待どおりに動作します!

\e[Kgrepにこれらのコードが含まれているのはなぜですか?上書きを許可するスクリプトを作成しています。セカンドカラー、よい: c=--color=always; ls $c /bin/gzip | grep $c 'z'。だから私は必要です。理解するgrep \e[K

ベストアンサー1

GREP_COLORS環境変数を設定してこの動作を変更できます。

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

grepマニュアルページから:

          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。詳しくはマニュアルページをご覧ください。

おすすめ記事