2013-10-10 13 views
10

Tôi có tập lệnh bash chạy và xuất ra tệp văn bản, tuy nhiên mã màu nó sử dụng cũng bao gồm những gì tôi muốn biết là cách xóa chúng khỏi tệp , tức làXóa mã màu ANSI khỏi tệp văn bản bằng bash

^[[38;1;32mHello^[[39m 
^[[38;1;31mUser^[[39m 

vì vậy tôi chỉ muốn được trái với Xin chào và tài

+0

câu trả lời liên quan sử dụng python: http://stackoverflow.com/questions/14693701/how-can-i-remove -e-ansi-escape-sequence-from-a-string-in-python – GreyCat

+2

Trùng lặp: http://unix.stackexchange.com/questions/4527/program-that-passes-stdin-to-stdout-with-color -codes-stripped – GreyCat

Trả lời

1

Điều này giải quyết vấn đề này?

$ echo "^[[38;1;32mHello^[[39m" | sed -e 's/\^\[\[[0-9;]\{2,\}m//g' 
Hello 

cổ vũ !!

+0

Không, không, bởi vì '^ [' đại diện cho ký tự thoát ASCII (Control- [, mã 27). – Armali

+0

@Armali: không hiểu điểm của bạn. Theo yêu cầu của OP, nó sẽ hoạt động. Bạn có thể đăng một ví dụ mà nó không hoạt động không? Chúc mừng !! – MacUsers

+0

Có ... 'TERM = xterm tput setf 1 | sed -e 's/\^\ [\ [[0-9;] \ {2, \} m // g' | hexdump -C' – Armali

3
sed -r "s/\x1B\[(([0-9]{1,2})?(;)?([0-9]{1,2})?)?[m,K,H,f,J]//g" file_name 

lệnh này loại bỏ các ký tự đặc biệt và mã màu từ tập tin

đây là một số mã ANSI: ESC[#;#H or ESC[#;#f di chuyển con trỏ đến dòng #, cột # ESC[2J rõ ràng màn hình và nhà con trỏ ESC[K rõ ràng đến cuối dòng,

lưu ý trong trường hợp mã rõ ràng không có số hoặc dấu chấm phẩy ;

đồng ý với bình luận dưới đây: nếu con số này là hơn 2 chữ số vui lòng sử dụng này:

sed -r "s/\x1B\[(([0-9]+)(;[0-9]+)*)?[m,K,H,f,J]//g" filename 
+0

không có sự đảm bảo về số lượng các bộ phận số trong mã, những thiết lập màu sắc có thể có tối đa 5 số mà không cần dự phòng. các mã để cài đặt các tính năng khác (ví dụ tần số chuông liên lạc của linux) có thể có nhiều hơn 2 chữ số trong một hàng. – Jasen

+0

đồng ý với bạn Jasen :-) –

Các vấn đề liên quan