如何从文本文件中去除 ANSI 转义码?

How to strip the ANSI escape codes from a text file?

我正在开发 VSCode 1.51(目前是最新版本),而 运行 terraform plan .. 来自集成的 PowerShell(此工作站上的 5.1)我注意到如果我通过运算符 (.. > .\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 读取文件,如何将上述序列替换为单个 space 字符 (' ')?

更新

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

根据 Notepad++ 7.8.7 的文档:

Notepad++ regular expressions use the Boost regular expression library v1.70, which is based on PCRE (Perl Compatible Regular Expression) syntax, only departing from it in very minor ways.

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

\e\[(.*?)m

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

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

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