2016-04-11 90 views
1

我有一個測試腳本(我不能改變)的輸出文件,輸出在終端看起來不錯,這要歸功於編碼,它以漂亮的顏色顯示輸出。從linux文件中刪除顏色代碼

然而,當我vim的文件,我得到如下:

^[[1m0024^[[0m, ^[[36munknown.10^[[0m --> ^[[32mUNKNOWN^[[0m 

我寧願文件包含:

0024, unknown.10 --> UNKNOWN 

有一對夫婦對stackover流類似的問題,但這樣遠遠沒有找到適合我的解決方案。

任何幫助將不勝感激!

非常感謝!

附加信息:

我不想隱瞞色彩的人物,我想從文件中刪除它們。

輸出進入證據文件,然後該文件被推送到GIT供團隊審閱。這是很難與那些顏色代碼:(GIT的UI

+0

請參閱http://unix.stackexchange.com/questions/7695/how-to-make-vim-display-colors-as-indicated-by-color-codes –

+0

我不想隱藏顏色字符,我想刪除它們。輸出到證據文件中,然後該文件被推送到GIT供團隊審閱。使用這些顏色代碼很難GIT UI:( –

回答

1

如果不能從生產輸出的工具刪除它們,你仍然可以用事後以下sed命令將其刪除:

sed -r 's/\^\[\[[0-9]{1,2}m//g' 

例如:

$ echo """^[[1m0024^[[0m, ^[[36munknown.10^[[0m --> ^[[32mUNKNOWN^[[0m""" | sed -r 's/\^\[\[[0-9]{1,2}m//g' 
0024, unknown.10 --> UNKNOWN 
+0

我跑這樣sed:cat bad_file | sed -r's/\^\ [\ m} {//' >> good_file,它仍然有不需要的文本,我假設我正在運行命令不正確? –

+0

1)是的,你應該像這樣運行sed:'sed -r's/\^[[[0-9] {1 ,2} m // g'badFile',如果你想輸出stdout(即重定向它:'sed pattern badFile> goodFile')或'sed -ir's/\^[[[0-9] {1 ,2} m // g'badFile',如果你想編輯文件'in-place'。2)我認爲你將不得不使用oliv的答案,我沒有考慮到特殊字符 – Aaron

+0

其實你的命令本身沒有錯,應該工作。將文件傳遞給sed命令比使用'cat'更容易,'-i'標誌使文件編輯更容易。 – Aaron

1

要除去顏色控制字符,則可以使用下面的sed命令:

sed 's/\x1b\[[^\x1b]*m//g' file 

here所示,一個顏色代碼由<Esc>[FormatCodem組成。

轉義字符是十六進制的\x1b(有時標記爲\e\033)。

該命令查找序列轉義,後跟方括號\x1b\[,直到字符m,如果發現它將其刪除。

除了轉義字符本身[^\x1b]*之外,這兩個字符之間的所有內容都是允許的。這允許有最短的正則表達式。

+0

進一步分析,它看起來像你的正則表達式意外刪除一些數據:(0011,e - > z應該是:0011,zone_name.src_zone_name - > dmz –

+0

如果沒有確切的樣本給出了什麼是錯誤的你也可以嘗試'sed's/\ x1b \ [[m] * m // g''。如果這不起作用,請複製/粘貼輸入數據。 – oliv