grep --color thêm mã ANSI ESC [K - Điều này có thể thay đổi văn bản được hiển thị


9

Tại sao grep thêm mã ANSI \e[Kvào đầu ra màu của nó? Tôi không thể thấy quan điểm của nó, nhưng rõ ràng các nhà phát triển có thể. Đó là mã Terminal ANSI / VT100 được sử dụng để "Xóa dòng từ vị trí con trỏ hiện tại đến cuối dòng" .

Trong trường hợp rìa, grep có thể khiến văn bản "biến mất" khỏi màn hình thiết bị đầu cuối. Ví dụ:

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

Hiển thị tiếng vang đơn giản : cb, nhưng màn hình màu hiển thị:c

Văn bản được mã hóa cơ bản là: echo -e 'ab\r\033[01;31m\033[Kc\033[m\033[K' Tuy nhiên, không có \e[Kmã, echo -e 'ab\r\033[01;31mc\033[m'hoạt động như mong đợi!

Lý do cho việc bao gồm các \e[Kmã này của grep là gì . Tôi đang viết một kịch bản để cho phép phủ một lớp màu thứ hai , như trong : c=--color=always; ls $c /bin/gzip | grep $c 'z'. vì vậy tôi cần hiểu tại sao grep sử dụng \e[K.

Câu trả lời:


11

Bạn có thể thay đổi hành vi này bằng cách đặt GREP_COLORSbiến môi trường:

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

Từ greptrang người đàn ông:

          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).

Nó được thực hiện ở vị trí đầu tiên để đặt nền của phần còn lại của dòng thành màu chính xác, trong trường hợp nó được thay đổi trước đó (mặc dù theo mặc định thì không phải vậy; ai đó có thể thiết lập để làm như vậy trong cài đặt của riêng họ).

Bạn cũng có thể muốn chơi với các tùy chọn khác có thể được đặt trong GREP_COLORS; xem trang người đàn ông để biết chi tiết đầy đủ.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.