Tôi có một số tập lệnh tạo ra màu sắc và tôi cần loại bỏ điều này.Xóa màu khỏi đầu ra
#!/bin/bash
exec > >(tee log) # redirect the output to a file but keep it on stdout
exec 2>&1
./somescript
Đầu ra là (trong tập tin log):
java (pid 12321) is [email protected][60G[@[0;32m OK @[0;39m]
Tôi không biết làm thế nào để đưa các nhân vật ESC đây, vì vậy tôi đặt @
vào chỗ của nó.
Tôi đã thay đổi kịch bản thành:
#!/bin/bash
exec > >(tee log) # redirect the output to a file but keep it on stdout
exec 2>&1
./somescript | sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g"
Nhưng bây giờ nó mang lại cho tôi (trong tập tin log):
java (pid 12321) is [email protected][60G[ OK ]
Làm thế nào có thể tôi cũng loại bỏ điều này '@[60G
?
Có thể có cách tắt hoàn toàn màu cho toàn bộ tập lệnh?
Người dùng BSD/OSX: Chúng tôi thường không có tùy chọn -r để sed. 'brew install gnu-sed' sẽ cài đặt một phiên bản có khả năng. Chạy với 'gsed'. –
Nếu tôi làm 'echo" $ (tput setaf 1) foo $ (tput sgr0) bar "| sed-r "s/\ x1B \ [([0-9] {1,2} (; [0-9] {1,2})?)? [mGK] // g" | mèo -A', tôi nhận được: 'foo^O bar $' Vì vậy, tôi đoán một số ký tự không được xóa đúng, phải không? Bạn có biết làm thế nào để sửa chữa? – edi9999
@ edi9999 Theo như tôi có thể nói, sự khác biệt có cài đặt màu sắc vượt quá 16 màu (như 'hỗ trợ' setaf') yêu cầu nhiều tham số hơn chỉ hai; regex của tôi hỗ trợ hai. Thay đổi '?' Đầu tiên cho '*' sẽ giúp ích. Xử lý 'sgr0' là có thể nhưng dựa trên một tìm kiếm nó có khả năng phát triển bên ngoài phạm vi của câu trả lời dựa trên regex hacky này. –