Contents

如何将stdout保存到文件时保留颜色

1. 概述

在本教程中,我们将介绍一些可用于将标准输出写入文件同时保留其颜色的工具。这在调试时特别有用,因为彩色部分可以更轻松地扫描输出日志。

2. 使用tee

**tee 命令是一种实用程序,它读取标准输入并同时写入标准输出和一个或多个文件。**该命令的名称来自管道中使用的 T 型分离器。

我们将通过管道将它与其他命令组合使用。

下面是tee命令的语法:

$ tee [option]... [file]...

我们将使用echo 命令生成一些彩色输出,然后使用 tee 命令将其通过管道传输以保存输出:

$ echo -e "\e[1;32m Blogdemo is awesome \e[0m" | tee -a tee_output.txt

我们得到这个输出:

/uploads/write_stdout_to_file_with_colors/1.png

让我们分解命令来理解它:

  • echo -e:使用带有-e标志的**echo来输出我们的字符串,并启用反斜杠转义的解释
  • “\e;32m … \e[0m”: ANSI 转义序列将文本转换为绿色。我们使用了终端颜色代码 *“32”,*它将前景色更改为绿色
  • *tee -a:*如果文件不存在则创建一个文件并将文本附加到其中

作为一个基本示例,我们使用tee来保存echo命令的彩色输出。同样,我们可以将tee与其他产生彩色输出或日志的命令一起使用。

3. 使用grep

**grep 是在文件中搜索文本或字符串模式的基本命令。**这些模式称为正则表达式。

下面是grep命令的语法:

$ grep [options] pattern [files]

让我们创建一个我们将与grep一起使用的sample.txt文件:

$ cat >> sample.txt
Blogdemo is awesome!!!

接下来,让我们使用grep为匹配的字符串着色,然后将输出定向到不同的文件:

$ grep --color=always "awesome" sample.txt > grep_output.txt

这是我们使用cat 查看输出文件内容时的结果:

/uploads/write_stdout_to_file_with_colors/2.png

在将输出定向到文件时,我们使用–color=always 和 grep 来保留 ANSI 序列。默认情况下,grep在通过管道传输到文件时从输出中去除颜色。

4. 使用script

**script 是用于制作所有终端活动的打字稿的命令。**它记录所有活动,包括输入和输出,直到我们停止它。

它默认将数据保存在打字稿文件中。但是我们可以传递一个参数来将输出保存到不同的文件中。

脚本命令使用两个文件:一个用于终端输出,另一个用于计时信息。

让我们看看script命令的语法:

$ script [options] [file]

要在保存到文件时保留 ANSI 字符,让我们使用此命令:

$ script -q /dev/null -c "echo -e '\e[1;32m Blogdemo is awesome \e[0m'" > script_output.txt

这不会给我们任何输出,但我们可以使用cat查看创建文件的内容:

/uploads/write_stdout_to_file_with_colors/3.png

分解此命令以了解更多信息:

  • -q: –quiet选项,确保开始和完成消息不会写入标准输出
  • */dev/null:*我们使用此路径来利用脚本标签并同时丢弃输出文件
  • *’\e[1;32m … \e[0m’:将文本转换为绿色的 ANSI 转义序列。我们使用了终端颜色代码“32”,*它将前景色更改为绿色

我们可以将echo命令替换为任何其他产生彩色输出的命令。

5. 使用echo

echo 命令显示我们作为参数传递的文本字符。

我们可以将echo与指定文件中文本颜色的转义序列组合使用:

$ echo -e "\e[1;32m Blogdemo is awesome \e[0m" > echo_output.txt

这会将文本以绿色保存到echo_output.txt文件中。我们用cat来查看:

$ cat echo_output.txt

/uploads/write_stdout_to_file_with_colors/4.png

我们使用带有*-e标志的echo来启用反斜杠转义序列的处理。和以前一样,终端颜色代码“32”*用于将文本更改为绿色。

6. 使用ansi2html

**ansi2html 是一个 Linux 程序,可以将 ANSI 日志转换为漂亮的 HTML 页面。**它还将 ANSI 颜色代码转换为 HTML 标签。默认情况下,它支持所有标准颜色和属性。

ansi2html默认不可用,但我们可以通过包管理器安装它。

让我们使用此命令在 Debian、Ubuntu 或 Kali 上安装:

$ sudo apt-get install colorized-logs

在 Red Hat 上,我们可以使用yum

$ yum install colorized-logs

安装后,我们可以使用echo生成彩色输出,然后使用ansi2html将其通过管道将其保存到 HTML 文件中:

$ echo -e "\e[1;32m Blogdemo is awesome \e[0m" | ansi2html > ansi_output.html

这将创建一个新的ansi_output.html文件,我们可以使用任何网络浏览器预览该文件:

/uploads/write_stdout_to_file_with_colors/5.png

7. 使用aha

**aha (ANSI HTML Adapter)是一个 Linux 工具,可以将 ANSI 转义序列从终端转换为 HTML。**它由 Alexander Matthes 开发,并得到大多数主要 Linux 发行版的支持。

aha默认不可用,但我们可以通过包管理器安装它。

让我们使用此命令在 Debian、Ubuntu 或 Kali 上安装:

$ sudo apt-get install aha

在 Red Hat 上,我们可以使用yum

$ yum install aha

安装后,我们可以将彩色输出转换为 HTML 并将其保存到文件中:

$ echo -e "\e[1;32m Blogdemo is awesome \e[0m" | aha --black > aha_output.html

这是创建的 HTML 文件的预览。我们可以通过网络浏览器查看:

/uploads/write_stdout_to_file_with_colors/6.png

我们使用–black*标志将页面的背景颜色设置为黑色。*