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

ale*_*niz 1 regex notepad++ ansi-escape terraform

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

- ESC[0m
- ESC[1m
- ESC[4m
- ESC[31m
- ESC[32m
- ESC[33m
Run Code Online (Sandbox Code Playgroud)

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

更新

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

ale*_*niz 8

根据 Notepad++ 7.8.7 的文档:

Notepad++ 正则表达式使用 Boost 正则表达式库 v1.70,该库基于 PCRE(Perl 兼容正则表达式)语法,仅在很小的方面有所不同。

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

\e\[(.*?)m
Run Code Online (Sandbox Code Playgroud)

并将它们替换为单个空格字符(Notepad++ 替换对话框中替换为:字段中不带引号的“ ”)。详细信息:

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


Mar*_*ins 6

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