2016-05-20 23 views
0

我看到類似的問題和解答stackoverflow.comTelnetClient輸出 - ANSI禁用

不幸的是,這不適合我。我和前面的問題給出了相同的代碼,但是「啞」終端類型(TelnetClient telnet = new TelnetClient(「dumb」)是他爲他人提供的解決方案)不是過濾ANSI字符,所以我得到這個:

上次登錄:星期五5月20日10時09分21秒從172.20.22.244

[01; 33mteltest @ vivadev [00米:01;34米〜[00米$ LS LS測試[01; 33mteltest @ vivadev [00米:[01; 34m〜[00m $ cd test cd testing [01; 33mteltest @ vivadev [00m:[01; 34m〜/ testing [00m $ ls

]我需要一個可讀的文件。有沒有其他解決方案已知,如編碼outputStream,什麼?

謝謝。

回答

1

傳統應用注意TERM,所以dumb(其確實不是使用顏色)會做你想做的。但是,有一些硬編碼的應用程序(不需要評論)。

如果您將程序的輸出重定向到文件(例如文件),則其中一些會壓制顏色。

foo >bar 

但很多(可能是大多數行爲不當的程序)甚至忽略了這一點。要解決這些,你必須過濾的結果,或者由sed腳本或類似的程序,或者通過(例如)通過重定向或使用script然後後處理結果捕捉你的命令的輸出。例如,你可以用腳本來做到這一點,如

#!/bin/sh 
myscript=$(mktemp) 
trap "sed -f $myscript typescript; rm -f $myscript typescript" EXIT INT QUIT HUP 
cat >$myscript <<"EOF" 
s/^[[[][<=>?]\{0,1\}[;0-9]*[@-~]//g 
xample: 
s/^[[]][^^[]*^[//g 
s/^[[]][^^[]*^[\\//g 
:loop 
s/[^^[]^[\(.\)/\1/g 
t loop 
s/ *$//g 
s/^.* //g 
s/^[[^[]//g 
/\1/g 
EOF 
script -c "$*" >/dev/null 

這說明了這種方法。該示例中的大部分^[對都是文字ASCII轉義字符,您將無法選擇/粘貼。原始sed腳本位於:script2log

腳本的要點是它正常運行命令,然後回顯過濾器結果。

+0

謝謝。我會嘗試。 –