4

我正在使用 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

4

3 回答 3

4

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

您可以使用字符串的 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 字符(即 Unicode 中的 \u001B)。

于 2011-08-26T14:24:08.323 回答
1

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

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

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

于 2011-08-26T14:26:34.647 回答
1

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

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

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

于 2015-09-03T09:28:40.020 回答