Colors

將 STDIN 傳遞到 STDOUT 並去除顏色程式碼的程序?

  • February 20, 2021

我有一個產生彩色輸出的命令,我想將它通過管道傳輸到一個去除了顏色程式碼的文件中。cat除了去除顏色程式碼之外,是否有類似的命令?我打算做這樣的事情:

$ command-that-produces-colored-output | stripcolorcodes > outfile

你會認為會有一個實用程序,但我找不到它。但是,這個 Perl 單行程式碼應該可以解決問題:

perl -pe 's/\e\[?.*?[\@-~]//g'

例子:

$ command-that-produces-colored-output | perl -pe 's/\e\[?.*?[\@-~]//g' > outfile

或者,如果您想要一個腳本,您可以另存為stripcolorcodes

#! /usr/bin/perl

use strict;
use warnings;

while (<>) {
 s/\e\[?.*?[\@-~]//g; # Strip ANSI escape codes
 print;
}

如果您只想去除顏色程式碼,而保留任何其他 ANSI 程式碼(如游標移動),請使用

s/\e\[[\d;]*m//g;

而不是我上面使用的替換(刪除所有 ANSI 轉義碼)。

引用自:https://unix.stackexchange.com/questions/4527