字符^[[37m
和^[[0m
是ANSI转义序列(CSI代码)的一部分。另请参阅这些规格。
使用GNU sed
sed 's/\x1b\[[0-9;]*m//g'
\x1b
(或\x1B
)是转义特殊字符
(sed
不支持替代字符\e
和\033
)
\[
是转义序列的第二个字符
[0-9;]*
是颜色值正则表达式
m
是转义序列的最后一个字符
mac在macOS上,默认sed
命令不支持特殊字符,例如slm和steamer25在注释中\e
指出的字符。使用代替,您可以使用安装。gsed
brew install gnu-sed
OP命令行示例: (OP表示原始海报)
perl -e 'use Term::ANSIColor; print color "white"; print "ABC\n"; print color "reset";' |
sed 's/\x1b\[[0-9;]*m//g'
汤姆·黑尔(Tom Hale)建议删除所有其他转义序列,[a-zA-Z]
而不仅仅是使用m
图形模式(彩色)转义序列专用的字母。但是[a-zA-Z]
可能太宽了,可能会去除太多。MichałFaleński和Miguel Mota建议分别使用[mGKH]
和删除一些转义序列[mGKF]
。Britton Kerin指出K
,除了m
从gcc
错误/警告中删除颜色之外,还必须使用(不要忘记重定向gcc 2>&1 | sed...
)。
sed 's/\x1b\[[0-9;]*m//g' # Remove color sequences only
sed 's/\x1b\[[0-9;]*[a-zA-Z]//g' # Remove all escape sequences
sed 's/\x1b\[[0-9;]*[mGKH]//g' # Remove color and move sequences
sed 's/\x1b\[[0-9;]*[mGKF]//g' # Remove color and move sequences
Last escape
sequence
character Purpose
--------- -------------------------------
m Graphics Rendition Mode (including Color)
G Horizontal cursor move
K Horizontal deletion
H New cursor position
F Move cursor to previous n lines
使用 perl
sed
在某些操作系统上安装的版本可能受到限制(例如macOS)。该命令perl
的优点是通常更容易在更多操作系统上安装/更新。Adam Katz建议在PCRE中使用\e
(相同\x1b
)。
根据要过滤的命令选择正则表达式:
perl -pe 's/\e\[[0-9;]*m//g' # Remove colors only
perl -pe 's/\e\[[0-9;]*[mG]//g'
perl -pe 's/\e\[[0-9;]*[mGKH]//g'
perl -pe 's/\e\[[0-9;]*[a-zA-Z]//g'
perl -pe 's/\e\[[0-9;]*m(?:\e\[K)?//g' # Adam Katz's trick
OP命令行示例:
perl -e 'use Term::ANSIColor; print color "white"; print "ABC\n"; print color "reset";' \
| perl -pe 's/\e\[[0-9;]*m//g'
用法
正如Stuart Cardall的评论所指出的那样,sed
项目Ultimate Nginx Bad Bot(1000个星标)使用此命令行来清理电子邮件报告;-)
more
或less -R
可以将转义码解释为颜色,而不是使用文本编辑器。