我在stackoverflow.com上看到了类似的问题和答案
不幸的是,这对我不起作用。我有与前面这样的问题中给出的例子相同的代码,但是" dumb"终端类型(TelnetClient telnet =新的TelnetClient(" dumb")是他解决的问题)没有过滤ANSI字符所以我得到了这个:
上次登录:5月20日星期五10:09:21来自172.20.22.244
[01; 33mteltest @ vivadev [00m:[01; 34m~ [00m $ ls ls测试[01; 33mteltest @ vivadev [00m:[01; 34m~ [00m $ cd测试cd测试[01; 33mteltest @ vivadev] [00m:[01; 34m~ /测试[00m $ ls
我需要一个可读的文件。有没有其他已知的解决方案,如编码outputStream,什么?
谢谢。
答案 0 :(得分:1)
传统应用会注意TERM
,因此dumb
(不使用颜色)会做你想要的。但是,有许多硬编码应用程序(无需评论)。
如果将程序输出重定向到文件,其中一些会抑制颜色,例如
foo >bar
但许多人(可能是大多数行为不端的计划)都忽略了这一点。要解决这些问题,您必须过滤结果,通过sed
脚本或类似程序,或通过(例如)通过重定向或使用{{捕获命令的输出1}}然后后处理结果。例如,您可以使用类似的脚本执行此操作
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
脚本的要点是它正常运行命令,然后回显过滤结果。