在终端上用jq打印彩色原始输出

时间:2019-07-31 20:27:14

标签: bash jq ansi-escape ansi-colors

我正在尝试在终端上打印报告。该报告是JSON,我将其作为原始jq输出打印在终端上。

我正在尝试为输出中的一些值着色

echo -e "\033[31m Hello World"

但无法这样做。

当我执行以下操作

echo '[{"value": "New", "onclick": "Ready"},{"value": "Old", "onclick": "Stopped"}]' | jq -r  '.[] | "\n", .value, .onclick '

它打印

  

     

准备好

     

     

已停止

因此它可以理解\ n换行符 但我想要这样的东西

  

新功能(粗体和红色)

     

准备好

     

旧(粗体和红色)

     

已停止

使其更具可读性

1 个答案:

答案 0 :(得分:0)

此插图应该足以使您克服障碍:

jq -n -r '

def colors:
 {
 "black": "\u001b[30m",
 "red": "\u001b[31m",
 "green": "\u001b[32m",
 "yellow": "\u001b[33m",
 "blue": "\u001b[34m",
 "magenta": "\u001b[35m",
 "cyan": "\u001b[36m",
 "white": "\u001b[37m",
 "reset": "\u001b[0m",
};

colors.red + "red" + colors.green + "green"
'

阐述

# print $text in the specified color
def pc($text; color):
  (colors | color) + $text + colors.reset;

# Usage example:
pc("red"; .red) + pc("green"; .green)