bash echo颜色到文本文件

bash echo颜色到文本文件

如何使用 bash 编写彩色文本?

RED='\033[0;31m'
GREEN='\033[0;32m'
NC='\033[0m' 
greprc=$?
if [[ $greprc -eq 0 ]] ; then
 echo -e "${GREEN} converged${NC}" >>log
else
  echo -e "${RED} not converged${NC}" >>log
fi

如果仅提示终端,则将文本着色。但是,当我将其写入文件(纯文本)时,它不会对log文件中的文本进行着色。如何在日志中写入彩色文本?

答案1

cat这是彩色文件的复制粘贴输出:

[36m 
hello36
[35m 
hello35
[37m 
hello end

以上是为了说明ESC的特殊含义——难以显示,难以输入。在 stackexchange 的编辑窗口中,我看到一个小图标,如 [ESC]。

改为cat -A colorhello > col.txt

^[[36m $
hello36$
^[[35m $
hello35$
^[[37m $
hello end$
$
$

(显然,最后有两个空行)(我在另一个 Firefox 选项卡中打开的 col.txt 进行复制)

在 vim 中,转义符将深蓝色显示为“^[”。要插入一个:ctrl-v [ESC]。

在vi中,ESC只是^[,当我尝试将光标放在“^”上时,我的屏幕闪烁一次。

当然,正如答案中指出的那样,这是一种基本的“富文本”格式。这些转义符和控制序列就在那里,可能比灰色文本更烦人。

(我注意到当文件提示符和光标着色时,文件中用于更改光标的 ANSI 控制序列 (ESC [?1;2;3c)vimrc就会生效)cat

当然,您必须cat看到颜色 - 它们是由终端解释的。在编辑器中它们没有任何意义。而且我认为控制序列的语法突出显示不会...投入大量时间。


添加:您不应该把它反过来:插入一些短的魔术字符串而不是 ESC 序列,以便您可以轻松地按行突出显示它。有点像 dmesg 看起来带有括号内的时间戳

[info] Yor first logline...in normal color
[info] Another normal line
[warn] This could appear yellow in your editor
[error] This sticks out red and sticks also out b/w
[info] And so on

就像这样,如果你愿意,你可以看到颜色,以及它们的含义(“哦,我认为这条消息不重要,因为它是如此鲜艳的红色调”:-)当你刚抓到它的时候,它看起来仍然很漂亮。

(一旦你关闭所有那些过度的语法文件,vim 中的语法突出显示就很棒了!)

相关内容