我有一些脚本,产生输出的颜色,我需要删除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?
也许有一种方法可以完全禁用整个脚本的着色?
@jeff-bowman的解决方案帮助我摆脱了一些颜色代码。
我在正则表达式中添加了另一小部分,以便删除更多:
sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[mGK]//g" # Original. Removed Red ([31;40m[1m[error][0m)
sed -r "s/\x1B\[([0-9];)?([0-9]{1,2}(;[0-9]{1,2})?)?[mGK]//g" # With an addition, removed yellow and green ([1;33;40m[1m[warning][0m and [1;32;40m[1m[ok][0m)
^^^^^^^^^
remove Yellow and Green (and maybe more colors)
下面的正则表达式将错过一些ANSI转义码序列,以及3位颜色。regex101.com的示例和修复。
用这个代替:
./somescript | sed -r 's/\x1B\[(;?[0-9]{1,3})+[mGK]//g'
我也有问题,有时,SI字符出现。
例如,输入echo "$(tput setaf 1)foo$(tput sgr0) bar"
这里有一种方法也可以剥离SI字符(shift in) (0x0f)
./somescript | sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[mGK]//g" | sed "s/\x0f//g"