2017-02-14 37 views
1

当我做svn up时,我得到的平均输出量为100行。另外还有X-teen外部体,总共可以更新约30秒(它们每隔2-3s就会一个接一个地弹出)。如何在运行时着色shell输出

我想着色(也许是转换)这个输出,以便我可以更清楚地看到它。

我知道我可以使用sed来做到这一点,但它需要一个讨厌格式的正则表达式 - 大量转义字符。
perl另一方面需要更清洁的正则表达式,但它在打印输出之前等待整个输入 - 我得到了30秒没有和BAM整个输出立即出现。

up.sh

#!/bin/bash 

svn up [email protected] \ 
    | 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的正则表达式一样的输出?

+0

你在Linux上吗? – hek2mgl

+1

我会首先确定没有任何东西被缓冲。 – simbabque

+0

@ hek2mgl是的,红色帽子要精确 –

回答

1

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

stdbuf -oL svn up "[email protected]" | perl ... 
+1

太棒了,'stdbuf'正是我需要的,谢谢。 这是实际的工作解决方案: 'svn up $ @ | stdbuf -oL grep -vE“^ \ s * $ | revision”(...)' –

+0

很高兴看到它帮助你! – hek2mgl