繁体   English   中英

Bash 脚本以彩色打印文本文件

[英]Bash script to print a text file in color

我有一个包含三段的文本文件。 我想使用 bash 脚本命令以不同的颜色显示不同的段落。 第 1 段为红色,第 2 段为蓝色,第 3 段为青色。

我设法使用类似的命令以彩色显示线条

echo -e '\E[32;47m Green.'; tput sgr0

但是,当有新段落时,我想解析我的文件并更改颜色。 我将不胜感激一些提示。

输入/tmp/FILEhttp : //pastie.org/4928415

脚本

#!/bin/bash

c=1
tput setaf $c
while read a; do
    [[ $a =~ ^$ ]] && tput setaf $((++c))
    echo "$a"
done < /tmp/FILE
tput sgr0

输出

在此处输入图片说明

这是一个 awk 解决方案,它依次使用颜色设置数组的元素:

BEGIN { nc = split("\33[31;47m \33[34;43m \33[36;40m", colors, " ");
        c=1; print colors[c] }
{ print }
/^$/ { c = 1+(c%nc); print colors[c]}

[编辑:上面错误地在段落之间添加了一个额外的空行。 更正后的代码如下:

BEGIN { nc = split("\33[31;47m \33[34;43m \33[36;40m", colors, " ");
        c=1; printf "%s", colors[c] }
/^$/ { c = 1+(c%nc); print colors[c]}
!/^$/

!/^$/导致任何非空行按原样打印。 (结束编辑)]。

如果上述内容在文件 3-para.awk 中,而数据在文件 3-para.data 中,则使用类似awk -f 3-para.awk 3-para.data的命令得到如下输出。脚本输出截图

为了更方便的使用,定义一个调用脚本然后将颜色重置为默认值的函数:

tricolor() {
   awk -f 3-para.awk $1; tput sgr0
}

通过(例如) tricolor 3-para.data使用该函数

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM