java TelnetClient输出- ANSI禁用

tzdcorbm  于 2023-03-28  发布在  Java
关注(0)|答案(1)|浏览(95)

我在www.example.com上看到过类似的问题和答案stackoverflow.com
不幸的是,这对我不起作用。我有与前面问题中给出的例子相同的代码,但是“dumb”终端类型(TelnetClient telnet = new TelnetClient(“dumb”)是其他人的解决方案)没有过滤ANSI字符,所以我得到了这个:
最后登录时间:2016年5月20日10:09:21来自172.20.22.244
[01;33mteltest@vivadev[00m:[01;34 m ~[00 m $ ls ls测试[01;33mteltest@vivadev[00m:[01;34 m ~[00 m $ cd测试cd测试[01;33mteltest@vivadev[00m:[01;34 m ~/测试[亿美元
我需要一个可读的文件。有没有其他已知的解决方案,如编码outputStream,任何东西?
谢谢大家。

9udxz4iz

9udxz4iz1#

传统的应用程序关注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
该脚本的要点是它正常运行命令,然后回显筛选结果。

相关问题