Làm cách nào để làm cho độ sâu của màu grep thoát ra khi grepping đầu ra đường ống? Tôi rất vui khi sử dụng cái gì khác (perl?) Thay vì grep.grep qua văn bản màu, ví dụ: gcc | colorgcc | grep regexp
usercase My: Tôi muốn
gcc foobar.c | colorgcc | grep regexp
ls --color | grep filename
làm việc độc đáo với màu sắc (trên một thiết bị đầu cuối sử dụng unix ANSI thoát).
Các ví dụ kiểm tra về hành vi tôi muốn:
echo -e "he\e[35mllo\e[00m" world |grep hell ==> he\e[35mllo\e[00m world
echo -e "\e[35m removed line\nhello\e[00m" world |grep hell ==> \e[35mhello\e[00m world
echo -e "\e[35m rem\e[1moved line\nhello\e[00m" world | grep hell ==> \e35m\e1mhello\e[00m world
Hiện tại dòng đầu tiên cho chuỗi rỗng, và một trong những thứ hai mang đến cho chuỗi uncolorised 'hello \ e [00 Tr thế giới'. Ở đây \ e [35m và \ e00m là các biến tố màu (thuộc tính): màu của một chữ cái được xác định bởi một vài chuỗi màu (thuộc tính) cuối cùng của mẫu \ e [P1; P2; .. m trong đó P1, P2, v.v ... là dãy số; \ e [P1m \ e [P2m tương đương với \ e [P1; P2m. \ e [0m làm cho màu mặc định và quên tất cả các \ e [.. m chuỗi trước đó: \ e [34m \ e [0m tương đương với \ e [0m. Có một số thuộc tính độc lập (in đậm, màu nền, màu của nền trước/chữ cái); mỗi số trong chuỗi thoát chỉ ảnh hưởng đến một số. Như vậy \ e [1m \ e [35m tương đương với \ e [1; 35m nhưng không phải \ e [35; 1m và \ e [35m; tuy nhiên, \ e [34m \ e [35m tương đương với \ e [35m vì cả hai đều ảnh hưởng đến cùng một attirbute (cụ thể là, màu của chữ cái/chữ cái trước).
đâm đầu tiên tại một giải pháp: 'gcc foobar.c | colorgcc | ít hơn -R +/regexp'. 'less -R' hiểu mã màu và sẽ tìm kiếm xung quanh chúng. – nneonneo