如何通过awk从管道接收的输入添加前缀并有条件地为前缀着色?

Modified on: Sat, 30 Jun 2018 11:27:00 +0800

有没有办法通过awk为接收(和过滤)的行添加前缀 - 是的我知道到目前为止可能 - 然后有条件地(例如基于是否存在周围Bash脚本的$PS1变量或[ -t 1 ])使用ANSI转义序列对其进行着色?

我知道如何使用^锚添加前缀以及大约两三种其他方式,我知道如何在Bash echoprintf

如何 - 如果有的话 - 我可以根据可以在内联awk脚本中评估的条件,按照概述为awk生成的输出着色吗?

注意:我有mawkgawkmawk是默认的。

最佳答案

if [ -t 1 ]; then
  eval "$(printf 'COLOR_ON="\033[31m" COLOR_OFF="\033[m"')"
else
  COLOR_ON= COLOR_OFF=
fi
export COLOR_ON COLOR_OFF
awk '{print ENVIRON["COLOR_ON"] "prefix: " ENVIRON["COLOR_OFF"] $0}'

或者:

[ ! -t 1 ]
awk -v color="$?" '{
   print((color ? "\033[31m" : "") "prefix: " (color ? "\033[m" : "") $0)}'

相关问答

添加新评论