\e[K
grepがカラー出力に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[K
grepにこれらのコードが含まれているのはなぜですか?上書きを許可するスクリプトを作成しています。セカンドカラー、よい: 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
。詳しくはマニュアルページをご覧ください。