我在stackoverflow.com上看到了类似的问题和答案

不幸的是,这对我不起作用。我有与上述类似问题相同的代码,但是“哑”终端类型(TelnetClient telnet = new TelnetClient(“ dumb”)是他为其他人提供的解决方案)没有过滤ANSI字符,因此我得到了以下信息:

上次登录:17年7月20日星期五10:09:21来自172.20.22.244

[01; 33mteltest @ vivadev [00m:[01; 34m〜[00m $ ls ls test] [01; 33mteltest @ vivadev [00m:[01; 34m〜[00m $ cd testing cd testing [01; 33mteltest @ vivadev [00m: [01; 34m〜/ testing [00m $ ls

我需要一个可读的文件。还有其他解决方案,称为outputStream编码吗?

谢谢。

最佳答案

常规应用程序注意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

该脚本的要点是它正常运行命令,然后回显过滤器结果。

10-06 12:06