用于“表格化”包含 ANSI 转义码的输入数据的 shell 工具

Jim*_*ean 5 shell colors text-processing tabulation columns

我的输入包含我想要制表的 ANSI 颜色代码。我希望输出保持彩色,因此表格输出应保持 ANSI 颜色代码。因此,天真地剥离它们不符合我的要求。

例如,对于这个输入,

\033[0;32;1mgreen_apple\033[0m 1 100
orange 20 19
pineapple 1000 87
avocado 4 30
Run Code Online (Sandbox Code Playgroud)

我期望的输出类似于

green_apple 1    100
orange      20   19
pineapple   1000 87
avocado     4    30
Run Code Online (Sandbox Code Playgroud)

在上面的输出中,“green_apple”应该根据输入的颜色代码(即绿色)着色。我想知道如何做到这一点。

我试过 column,但它不处理 ANSI 代码。的输出

echo '\033[0;32;1mgreen_apple\033[0m 1 100
orange 20 19
pineapple 1000 87
avocado 4 30' | column -t
Run Code Online (Sandbox Code Playgroud)

不幸的是

green_apple  1     100
orange                  20    19
pineapple               1000  87
avocado                 4     30
Run Code Online (Sandbox Code Playgroud)

注意非制表。

Sté*_*las 4

我认为没有这样的命令,你必须手动执行。就像是:

awk '
  {
    nf[NR]=NF
    for (i = 1; i <= NF; i++) {
      f[NR,i] = $i
      gsub(/\033\[[0-9;]*[mK]/, "", $i)
      len[NR,i] = l = length($i)
      if (l > max[i]) max[i] = l
    }
  }
  END {
    for (n = 1; n <= NR; n++) {
      for (i = 1; i < nf[n]; i++)
        printf "%s%*s", f[n,i], max[i]+1-len[n,i], ""
      print f[n,nf[n]]
    }
  }'
Run Code Online (Sandbox Code Playgroud)