【问题标题】:How to strip the ANSI escape codes from a text file? [duplicate]如何从文本文件中去除 ANSI 转义码? [复制]
【发布时间】:2021-02-25 13:52:01
【问题描述】:

我正在使用 VSCode 1.51(此时是最新版本),在从集成的 PowerShell(此工作站上的 5.1)运行 terraform plan .. 时,我注意到如果我将输出重定向到文本文件,通过操作员 (.. > .\a.txt) 或通过 Tee-Object (.. | Tee-Object -FilePath .\a.txt) 生成的输出文件被 ASCII escape sequences 破坏;特别是通过控制序列引入器 (CSI) 序列,例如 ESC[1m。 在我目前看到的输出文件中,我只观察到以下 6 个序列:

- ESC[0m
- ESC[1m
- ESC[4m
- ESC[31m
- ESC[32m
- ESC[33m

我正在使用 Notepad++ 7.8.7 读取文件,如何将上述序列替换为单个空格字符 (' ')?

更新

显然,如果可以从 terraform plan 输出中删除 ASCII 转义序列,那就更好了。

【问题讨论】:

标签: regex visual-studio-code terraform notepad++ ansi-escape


【解决方案1】:

根据 Notepad++ 7.8.7 的文档:

Notepad++ 正则表达式使用 Boost 正则表达式库 v1.70,它基于 PCRE(Perl Compatible Regular Expression)语法,只是在很小的地方偏离了它。

我直接在 Notepad++ 中替换了转义序列,使用以下正则表达式查找要替换的字符串:

\e\[(.*?)m

并用单个空格字符替换它们(在 Notepad++ 替换对话框上的 替换为: 字段中没有引号的' ')。 详情:

  • \e 匹配转义字符,
  • \[ 匹配左方括号,
  • \e\[ 因此匹配控制序列引入器(“ESC [”),
  • (.*?)m 匹配任何字符串,直到第一次出现字符 'm'。

【讨论】:

    【解决方案2】:

    这不是您提出的问题的直接答案,但我只想指出 terraform plan 有一个 -no-color 选项,它将禁用控制代码并仅在源处发出纯文本,避免以后需要去掉代码。

    【讨论】:

    • 谢谢@martin-atkins,这是一个很好的建议,当我需要调查文本文件上的 terraform plan 输出时,我可以利用该参数。
    • 我已将此标记为最佳答案。我更新了这个问题,声明消除根本原因将是一个更理想的结果。
    猜你喜欢
    • 2014-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多