当前位置: 首页 > 知识库问答 >
问题:

从输出中删除颜色

应和悦
2023-03-14

我有一些脚本,产生与颜色输出,我需要删除ANSI代码。

#!/bin/bash

exec > >(tee log)   # redirect the output to a file but keep it on stdout
exec 2>&1

./somescript

输出为(在日志文件中):

java (pid  12321) is running...@[60G[@[0;32m  OK  @[0;39m]

我不知道如何把ESC字符放在这里,所以我把@放在它的位置。

我把剧本改成:

#!/bin/bash

exec > >(tee log)   # redirect the output to a file but keep it on stdout
exec 2>&1

./somescript | sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g"

但是现在它给我(在日志文件中):

java (pid  12321) is running...@[60G[  OK  ]

我怎样才能删除这个'@[60G

也许有一种方法可以完全禁用整个脚本的着色?

共有3个答案

潘文乐
2023-03-14

我不能从任何其他答案中得到体面的结果,但以下对我有用:

somescript | sed -r "s/[[:cntrl:]]\[[0-9]{1,3}m//g"

如果我只删除了控制字符“^[”,它会留下其余的颜色数据,例如“33m”。包括颜色代码和“m”就完成了这项任务。我对s/\x1B//g不起作用感到困惑,因为\x1B[31m肯定能与echo一起工作。

房时铭
2023-03-14

我的意思是,这些答案中的大多数都试图限制转义码中的内容。因此,它们最终会丢失常见代码,如[38;5;60m(256色模式下的前景ANSI颜色60)。

它们还需要启用GNU扩展的-r选项。这些都不是必需的;他们只是让正则表达式读得更好。

下面是一个更简单的答案,可以处理256色转义,并适用于带有非GNUsed的系统:

./somescript | sed 's/\x1B\[[0-9;]\{1,\}[A-Za-z]//g'

这将捕获任何以[开头,有任意数量的小数和分号,并以字母结尾的内容。这将捕获任何常见的ANSI转义序列。

对于funsies,这里有一个更大、更通用(但测试最少)的解决方案,用于所有可以想象的ANSI转义序列:

./somescript | sed 's/\x1B[@A-Z\\\]^_]\|\x1B\[[0-9:;<=>?]*[-!"#$%&'"'"'()*+,.\/]*[][\\@A-Z^_`a-z{|}~]//g'

(如果有@edi9999的SI问题,请在末尾添加|se"s/\x0f//g";这适用于任何控件char,方法是用不需要的char的十六进制替换0f

周祺
2023-03-14

根据维基百科,您正在使用的se命令中的[m|K]是专门为处理m(颜色命令)和K(擦除部分行命令)而设计的。您的脚本试图将绝对光标位置设置为60(^[[60G),以获取一行中的所有OK,而您的se行没有覆盖这些OK。

(正确地说,[m|K]可能应该是(m|K)[mK],因为您没有尝试匹配管道字符。但现在这并不重要。)

如果您将命令中的最后一个匹配切换到[mGK](m | G | K),您应该能够捕获额外的控制序列。

./somescript | sed -r "s/\x1B\[([0-9]{1,3}(;[0-9]{1,2})?)?[mGK]//g"
 类似资料:
  • 问题内容: 在成功的调用中,我获得了带有键“ objects”的JSONArray,再次是带有键“ name”的testValue。输出为: 我的代码如下: 想要按以下方式打印名称:(不带双引号) 问题答案: 1. .replaceAll() 此方法将替换您名字中出现的所有双引号,而不是第一个和最后一个。 示例:“ Abcd”变为Abcd,但如果名称为“ Ab” cd“,则根据您的要求应为Ab”

  • 问题内容: 我从pandas函数获得了这样的输出文件。 我正在尝试只输出第二列,即 通过删除第一行的顶部和底部行。我怎么做? 问题答案: 您只需要属性: 您可以转换为列表或访问每个值:

  • 问题内容: 这应该很容易,但是我很难过。基本上,我在matplotlib中有一个子图,每次调用一个函数时,我都会绘制一个六边形图,但是每次调用该函数时,都会得到一个新的颜色条,所以我真正想做的就是更新颜色条。不幸的是,这似乎不起作用,因为通过subplot.hexbin重新创建了附加了颜色条的对象。 我现在在这个烦人的地方,尝试完全删除颜色条轴,然后重新创建它。不幸的是,当我删除颜色条轴时,子图轴

  • 问题内容: 我有一些javascript代码,可处理使用框架2.0构建的asp.net Web服务的json输出。现在,我需要支持从框架3.5 Web服务返回的数据。 我的JavaScript代码假定对象列表为返回值,在2.0中可以正常工作。但是,在框架3.5中,该列表包装在“ d”对象中。有什么办法可以删除“ d”包装并仅返回列表? 我宁愿在服务器端修复此问题 问题答案: 您不能将3.5+服务配

  • 我能够正确地重命名我的reducer输出文件,但r-00000仍然存在。我在我的减速机课上使用了多次输出。以下是这方面的细节。不确定我错过了什么或者我还需要做什么?

  • 我的Jtable有一个listSelectionListener: 我创建了一个按钮来删除带有事件的Jtable的所有行: 如果我在没有选择任何行的情况下按下按钮,则不会出现错误,但当我选择一行,然后按下按钮时,会出现以下错误: 当表没有ListSseltionListener时,不会发生这种情况。我哪里错了? 提前感谢您的帮助。