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

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

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

我知道如何使用锚点以及其他两种或三种方式添加前缀,^并且我知道如何在 Bashechoprintf.

awk如何(如果有的话)根据可以在内联脚本内评估的条件,对所概述的生成的输出进行着色awk

注意:我拥有mawkgawk由我支配,mawk是默认的。

答案1

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)}'

答案2

您可以通过以下方式检查终端:

> echo foo | awk '{if (system("tty >/dev/null 2>&1")) print "true"; else print "false";}'
true

相关内容