【问题标题】:Remove colour code from linux files [duplicate]从linux文件中删除颜色代码[重复]
【发布时间】:2016-08-01 13:17:23
【问题描述】:

我有一个来自测试脚本的输出文件(我无法更改),由于编码,输出在终端中看起来很棒,它以漂亮的颜色显示输出。

但是,当我 vim 文件时,我得到以下信息:

^[[1m0024^[[0m, ^[[36munknown.10^[[0m --> ^[[32mUNKNOWN^[[0m

我宁愿文件包含:

0024, unknown.10 --> UNKNOWN

关于stackover flow有几个类似的问题,但到目前为止我还没有找到适合我的解决方案。

任何帮助将不胜感激!

非常感谢!

附加信息:

我不想隐藏颜色字符,我想从文件中删除它们。

输出进入证据文件,然后将该文件推送到 GIT 以供团队审查。使用这些颜色代码很难使用 GIT UI :(

【问题讨论】:

  • 我不想隐藏颜色字符,我想删除它们。输出进入证据文件,然后将该文件推送到 GIT 以供团队审查。使用这些颜色代码很难使用 GIT UI :(

标签: linux bash vim encoding cat


【解决方案1】:

如果您无法从生成输出的工具中删除它们,您仍然可以在之后使用以下 sed 命令将它们删除:

sed -r 's/\^\[\[[0-9]{1,2}m//g'

例子:

$ echo """^[[1m0024^[[0m, ^[[36munknown.10^[[0m --> ^[[32mUNKNOWN^[[0m""" |  sed -r 's/\^\[\[[0-9]{1,2}m//g'
0024, unknown.10 --> UNKNOWN

【讨论】:

  • 我这样运行 sed:cat bad_file | sed -r 's/\^[[[0-9]{1,2}m//g' >> good_file 它仍然有不需要的文本。我假设我运行的命令不正确?
  • 1) 是的,你应该像这样运行 sed:sed -r 's/\^[[[0-9]{1,2}m//g' badFile,如果你想在标准输出上输出(即重定向它:sed pattern badFile > goodFile)或sed -ir 's/\^[[[0-9]{1,2}m//g' badFile,如果你想编辑文件'到位'。 2)我认为您将不得不改用奥利夫的答案,我没有考虑特殊字符
  • 实际上您的命令本身并没有错,应该可以工作。将文件传递给 sed 命令比使用cat 更容易,-i 标志使文件编辑更容易。
【解决方案2】:

要删除颜色控制字符,您可以使用以下 sed 命令:

sed 's/\x1b\[[^\x1b]*m//g' file

here所示,a色码由<Esc>[FormatCodem组成。

转义字符是十六进制的\x1b(有时记为\e\033)。

该命令查找后跟方括号\x1b\[ 直到字符m 的序列转义,如果找到则将其删除。

这两个字符之间的所有字符都是允许的,除了转义字符本身[^\x1b]*。这允许拥有最短的正则表达式。

【讨论】:

  • 进一步分析,您的正则表达式似乎意外删除了一些数据:( 0011, e --> z 应该是:0011, zone_name.src_zone_name --> dmz
  • 如果没有给出问题的确切样本,很难猜出哪里出了问题。你也可以试试sed 's/\x1b\[[^m]*m//g'。如果这不起作用,请复制/粘贴输入数据。
  • 谢谢奥利夫的回答!如果着色后有一个或多个 m 个字符,您的答案会删除 m 个字符,但这不会删除 m 个字符:sed 's/\x1b\[[0-9]*m//g'
猜你喜欢
  • 2013-10-18
  • 2013-07-07
  • 2013-05-24
  • 2013-01-17
  • 2018-01-07
  • 1970-01-01
  • 1970-01-01
  • 2020-02-17
相关资源
最近更新 更多