Tôi nghĩ rằng những gì bạn đang tìm kiếm là một số loại tập lệnh sed
sẽ bao quanh các từ bạn chọn với chuỗi màu ANSI thoát. (hmm ... lemme nhìn).
EDIT OK, đã nhận nó:
Dưới đây là một ví dụ cho outputting "Hello" trong đỏ sẫm:
echo -e "\033[31mHello\033[0m"
gì đang xảy ra? Trước hết, tôi đang sử dụng echo -e
để echo
không chuyển đổi dấu gạch chéo thành dấu gạch chéo trên màn hình, nhưng thay vì đọc chuỗi thoát của \033
làm một ký tự thoát duy nhất. Điều này thực sự chỉ là 33 trong bát phân, là 27 (thứ tự cho khóa ESC).
Vì vậy, những gì đang thực sự được gửi đến màn hình là một cái gì đó như:
<ESC>[32mHello<ESC>[0m
nào hiển thị ANSI giải thích là "đầu tiên làm lệnh 32m
, đầu ra 'Hello', và sau đó làm lệnh 0m
.
Trong trường hợp này, lệnh 32m
có nghĩa là "đặt màu của vùng đất thành 2" và vì màu # 2 có màu đỏ đậm, "bút" được thiết bị đầu cuối sử dụng sẽ có màu đỏ sậm. trở đi, tất cả các văn bản sẽ được hiển thị trên màn hình sẽ được dar k đỏ.
Khi chúng tôi thực hiện xuất văn bản được cho là màu đỏ, chúng tôi muốn đặt lại màu, vì vậy chúng tôi gọi lệnh 0m
để đặt lại màu thành bình thường.
Để biết danh sách tất cả các mã thoát, tra cứu trong [http://en.wikipedia.org/wiki/ANSI_escape_code Wikipedia] hoặc chỉ cần google cho nó.
Vì vậy, tất cả tập lệnh sed của bạn phải làm là thay thế các từ bạn chọn bằng các từ được bao quanh bởi các màu. Ví dụ, để thay thế từ "tháng hai" trong /var/log/messages
, làm như sau:
tail /var/log/messages | sed -e "s/Feb/\\o033[31m&\\o033[0m/"
(Bạn có thể phải thực hiện điều này như là người chủ thực sự đọc /var/log/messages
)
Tất cả những gì sed
làm là tìm kiếm các từ "Feb" và bao quanh nó với cùng chuỗi thoát như chúng ta đã sử dụng ở trên.
Bạn có thể mở rộng nó để tô màu nhiều từ:
tail /var/log/messages | sed -e "s/\(Feb\|Mar\|Apr\)/\\o033[31m&\\o033[0m/g"
Trong đó sẽ tô màu "tháng hai", "Mar", "Tháng tư" - mỗi màu đỏ sẫm.
Tôi hy vọng điều này sẽ cung cấp cho bạn một số ý tưởng về cách thực hiện những gì bạn cần!
một vấn đề: tùy chọn -E gây ra lỗi? – nickf
Bạn cần thay thế -E bằng -e và thoát tất cả các dấu ngoặc đơn. đuôi -f tệp | sed -e "s/\ ([0-9] + \)/$ RED \ 1 $ RESET/g; s/\ (\" [^ \ "] * \" \)/$ VÀNG \ 1 $ RESET/g " – itsadok
-E là không cần thiết. -E là một tùy chọn để sử dụng regexps mở rộng để bạn không cần phải thoát khỏi dấu ngoặc đơn, nhưng rõ ràng -E không có sẵn trên tất cả các phiên bản của sed. –