如何从ssh输出中删除颜色等

时间:2011-08-26 14:03:23

标签: java colors ssh jsch

我正在使用jsch从本地ssh服务器获取ssh输出。

当我在文本框中显示输出时,我在输出中得到所有这些奇怪的字符串,例如:

] 0;〜/ rails_sites / rex_raid

[32mRob @ shinchanii [33m~ / rails_sites / rex_raid [0m

我猜[33m和[0m标记新颜色或某物的开头并且] 0;〜标记换行符

如何摆脱这些输出解析这些字符串的输出?

这是一个例子(不是来自我)我的输出如何:

http://www.google.de/codesearch#048v6jEeHAU/typescript&q=%5D0;~&l=1

3 个答案:

答案 0 :(得分:4)

这些实际上是VT100终端控制转义序列。您可以在http://www.termsys.demon.co.uk/vtansi.htm找到它们的列表(不确定列表是否完整)。

您可以使用String的replaceAll方法(http://download.oracle.com/javase/1.4.2/docs/api/java/lang/String.html#replaceAll%28java.lang.String,%20java.lang.String%29),并创建一个匹配所有有效VT100转义序列的正则表达式。但是,在创建正则表达式时,请不要忘记在方括号之前存在不可打印的ESC char(即Unicode中的\ u001B)。

答案 1 :(得分:1)

这些是ANSI escape sequences。正如您所猜测的那样,这些旨在由终端实现,显示这些以更改颜色或某些字体属性。 (它们以Escape字符(ASCII 27)开头,但这可能不会显示在文本框中。)

  1. 正确的方法是,如果没有(或哑)终端,你的shell不会打印这些代码。但由于它们通常在脚本中进行硬编码(至少在我的帐户中,提示颜色在.bashrc中是硬编码的),这可能并不容易。

  2. 您可以解析这些代码,或者将它们剥离,或者甚至解释它们(使文本框变得丰富多彩)。我曾经开始实现最后一部分,但我认为可能存在现有的实现。

答案 2 :(得分:1)

我也使用JSch并遇到同样的问题。

供您参考,在JSch,Channel.setPtyType(" ansi")之前,连接可以删除ansi颜色,以便在Windows中可以接受输出。

不确定此设置是否与所有远程Linux / Unix服务器兼容