在Bash中打印文件内容时使用颜色

时间:2016-02-22 14:27:24

标签: bash colors

我有一个将文本存储在文件中的脚本。当我在bash shell中显示该文件的内容时,我希望使用一些该文本的bash颜色espcaed字符。如何实现这一目标。

Fox示例,ScriptOutput.txt包含

Server is \e[92mRUNNING\e[0m

我通常会捕获文件并获取内容,但cat不会为文本文件中该行的“RUNNING”部分着色。我也试过

echo $(cat ScriptOutput.txt)

但它会在一行中打印该文件中的所有内容,这对我来说毫无用处。有关如何使用每行中指定的颜色打印该文件内容的任何想法吗?

谢谢

3 个答案:

答案 0 :(得分:0)

而不是字符串\e,您希望脚本中有一个文字转义字符。如何输入这取决于您的终端和文本编辑器。

对我来说(使用OS X终端的nano,请不要鄙视!)我按Esc,然后按Shift-V。 nano告诉我它在"逐字输入"模式。然后我可以点击转义键并获得一个字面转义符(由^[在屏幕上显示)。

这将演示使用printf插入转义字符的通用方法:

printf '\033[44mfoo\033[0m\nbar\n\033[92mbaz\033[0m\n' > foo.txt
cat foo.txt

答案 1 :(得分:0)

您可以通过sed管道脚本输出,并使用ESC的十六进制值替换'\ e'字符。结果应该是彩色的。

cat ScriptOutput.txt | sed -e 's-\\e-\x1b-g'

答案 2 :(得分:0)

我最后使用echo存储文本然后逐行捕获文件并使用echo(echo -e)打印它

示例:

    echo 'Server1 is not \e[92mAVAILABLE\e[0m' >> scriptOutput.txt
    echo 'Server2 is not \e[31mNOT AVAILABLE\e[0m' >> scriptOutput.txt

    cat scriptOutput.txt | while read -r line; do echo -e "$line"; done

我需要将脚本输出存储在文件中,但我还需要稍后使用颜色在shell中打印其内容。这就是诀窍 无论如何,谢谢你们