如何在运行时为shell输出着色

时间:2017-02-14 13:40:32

标签: regex perl shell sed colors

当我svn up时,平均得到~100行输出。此外还有X-teen外部设备,总共更新约30秒(它们每2-3个弹出一个接一个)。

我想到了这个输出的着色(可能是变换),这样我就能更清楚地看到它。

我知道我可以使用sed来做到这一点,但它需要一个讨厌格式的正则表达式 - 许多转义字符。 另一方面,perl需要更清晰的正则表达式,但它在打印输出之前等待整个输入 - 我得到30秒没有任何东西,BAM整个输出一次出现。

up.sh

#!/bin/bash

svn up $@ \
    | grep -vE "^\s*$|revision" \
    | ${arhbin}/coloring/svn.sh \

$ {arhbin} /coloring/color_definitions.sh

#!/bin/bash
source ${arhbin}/coloring/color_definitions.sh

cat \
    | perl -pe 's/(^ *A.*$)/'$GREEN'\1'$NORMAL'/igs' \
    | perl -pe 's/(^ *D.*$)/'$RED'\1'$NORMAL'/igs' \
    | perl -pe 's/(^ *C.*$)/'$RED_BG'\1'$NORMAL'/igs' \
    | perl -pe 's/(^ *[?].*$)/'$BLUE'\1'$NORMAL'/igs' \
    | perl -pe 's/(^ *G.*$)/'$BLUE'\1'$NORMAL'/igs' \

如何使用Perl / Python(如正则表达式)在运行时为输出命令输出颜色?

1 个答案:

答案 0 :(得分:1)

在Linux上,您可以使用stdbuf来调整io缓冲。像这样:

stdbuf -oL svn up "$@" | perl ...