从输出中删除颜色

239

我有一些脚本会输出带着颜色的内容,我需要去除其中的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'符号?

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


2
对于node/npm,您可以使用strip-ansi:https://github.com/chalk/strip-ansi。 - Joshua Pinter
这个问题之前已经有人问过并得到了答案:https://dev59.com/rmw15IYBdhLWcg3wkMjz#6534712 - mike
22个回答

-3

适用于 macOS

$ my_program | pbcopy && pbpaste

1
你为什么认为 pbcopy 会从输入中删除颜色代码的转义序列? - user1934428

-8
这对我有效:
./somescript | cat

5
这取决于somescript的实现方式。它可能会或可能不会认出其标准输出是tty。(一些程序员会将终端特定的转义码硬编码到程序中,在其他终端或脚本中使用时会出现严重问题。) - Toby Speight
谢谢Toby。我用Django的manage.py进行了测试,但你说的有道理。 - spiderlama

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接