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

时间:2012-10-07 17:18:32

标签: bash text colors sed

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

我设法使用

等命令以彩色显示线条
echo -e '\E[32;47m Green.'; tput sgr0

但是,我想解析我的文件并在有新段落时更改颜色。我希望得到一些提示。

2 个答案:

答案 0 :(得分:5)

输入/tmp/FILE http://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

输出

enter image description here

答案 1 :(得分:4)

这是一个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之类的命令获取如下输出。 screenshot of script output

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

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

通过(例如)tricolor 3-para.data

使用该功能