regex 如何从文本文件中去除ANSI转义码?[duplicate]

rn0zuynd  于 2022-12-01  发布在  其他
关注(0)|答案(2)|浏览(126)

此问题在此处已有答案

Can I programmatically "burn in" ANSI control codes to a file using unix utils?(2个答案)
两年前就关门了。
我正在使用VSCode 1.51(目前是最新版本),在从集成PowerShell(在此工作站上为5.1)运行terraform plan ..时,我注意到如果我将输出重定向到文本文件,无论是通过操作符(.. > .\a.txt)还是通过Tee-Object(.. | Tee-Object -FilePath .\a.txt),生成的输出文件都会被ASCII escape sequences损坏;特别是通过控制序列引入器(CSI)序列,如ESC[1 m。在我目前看到的输出文件中,我只观察到以下6个序列:

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

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

更新

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

o4tp2gmn

o4tp2gmn1#

根据Notepad++ 7.8.7文档:
Notepad正则表达式使用Boost正则表达式库v1.70,它基于PCRE(Perl兼容正则表达式)语法,只是在很小的方面与之不同。
我直接在Notepad
中替换了转义序列,使用以下正则表达式查找要替换的字符串:

\e\[(.*?)m

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

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

lskq00tm2#

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

相关问题