如何在Bash输出中去除装饰性颜色字符?

4

一个控制台程序(translate-shell)具有彩色输出,并使用特殊的修饰字符:^[[22m,^[[24m,^[[1m等。

我想要将它们删除以获取纯文本。

我尝试使用tr -d "^[[22m"和sed 's/[\^[[22m]//g',但只删除了数字,而不是特殊字符^[。

谢谢。

2个回答

8
您有多种选择:

编辑

commandlinefu 的解决方案效果很好:

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

Unix.stackexchange提供的解决方案可能更好,但代码长度较长,建议将其存为独立脚本文件并执行,而不是仅使用一行命令。


命令行fu中的选项完美地工作了,谢谢:sed -r "s/\x1B[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g" - Gea Planet
这是一个仅包含链接的答案,请在答案本身中提供相关细节。 - chepner
正则表达式's/\x1b\[[0-9;]*m//g' 效果更佳 - beluchin

2

我在关于使用ANSI转义代码的手册发现了以下内容:

-no-ansi
    Do not use ANSI escape codes.

因此,在启动程序时,您应添加此选项。

不,该选项也会删除其他字符(如á é í ó ú ñ...)。 - Gea Planet
1
@GeaPlanet 那么你肯定做错了什么。那些字符不是ansi转义字符,也不应该受到“-no-ansi”的影响。这听起来更像是配置问题(或者是translate-shell的一个bug)。 - Jens

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