【问题标题】:How can I save Perl/Expect output that contains mixed ascii content?如何保存包含混合 ascii 内容的 Perl/Expect 输出?
【发布时间】:2014-11-07 18:09:32
【问题描述】:

我有一个使用期望库登录远程系统的 perl 脚本。我得到了与 before 方法交互的最终输出:

$exp->before();

我将其保存到文本文件中。当我在文件上使用 cat 时,它在终端中输出正常,但是当我在编辑器中打开文本文件或尝试处理它时,格式很奇怪:

[H[2J[1;19HCIRCULATION ACTIVITY by TERMINAL(2014 年 11 月 6 日)[11;1H

有没有更好的方法来保存输出?

当我运行 enca 时,它被识别为:

7 位 ASCII 字符

被非文本数据包围/混合

【问题讨论】:

  • 您看到的是 ANSI 转义码。如果您将 TERM 环境变量设置为无法理解的内容,则它们可能不会生成。
  • 谢谢,现在我知道我需要往哪个方向发展了。

标签: perl character-encoding expect text-processing


【解决方案1】:

您可以删除任何 ascii 字符。

$str1 =~ s/[^[:ascii:]]//g;
print "$str1\n";

【讨论】:

  • ANSI 转义码具有完全由 ASCII 字符组成的有趣特性。您是否尝试过您的解决方案以查看它对 OP 的示例字符串有何更改?
【解决方案2】:

通过使用 Text::ANSI::Util 库的 ta_strip() 函数,我能够从输出中删除 ANSI 转义码:

my $ansi_string = $exp->before();
my $clean_string = ta_strip($ansi_string);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-09
    • 2011-11-22
    • 2018-11-28
    • 2022-12-05
    • 2013-02-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多