2013-10-10 122 views
10

我有一個運行並輸出到文本文件的bash腳本,但是它使用的顏色代碼也包含在我想知道的是如何從文件中刪除它們,即使用bash刪除文本文件中的ANSI顏色代碼

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

,所以我只是想會留下您好,用戶

+0

相關答案使用Python:http://stackoverflow.com/questions/14693701/how-can-i-remove -sys-escape-sequences-from-a-string-in-python – GreyCat

+2

Duplicate:http://unix.stackexchange.com/questions/4527/program-that-passes-stdin-to-stdout-with-color代碼剝離 – GreyCat

回答

1

這是否解決了問題?

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

乾杯!

+0

不,它沒有,因爲'^ ['代表ASCII轉義字符(Control- [,代碼27)。 – Armali

+0

@阿瑪利:不明白你的觀點。根據OP的要求,它應該工作。你可以發表一個不起作用的例子嗎?乾杯!! – MacUsers

+0

Yes ...'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 

該命令從文件中刪除

特殊字符和顏色代碼,這些都是一些ANSI代碼: ESC[#;#H or ESC[#;#f把光標移到行號,列# ESC[2J清晰的屏幕和主光標 ESC[K明確到行尾,

請注意,如果是明碼,則不會有數字和分號;

同意下面的評論: 如果數字是超過2位好心使用:

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

不能保證代碼中的數字部分的數量,那些用於設置顏色的數字部分最多可以有5個數字而沒有冗餘。用於設置其他功能(例如,linux consile bell頻率)的代碼可以連續超過2個數字。 – Jasen

+0

同意你Jasen :-) –