当命令提示没有换行的输入时,使用`awk`处理输出

时间:2014-11-04 11:26:30

标签: bash maven awk

我有一个产生大量输出的进程(Apache maven),我想要为某些部分着色。具体来说,如果该行以[INFO]开头,我希望该初始子字符串为蓝色,所有其他文本保持不变。

这是我的脚本简化版color-maven

#!/bin/zsh

export BLUE=`tput setaf 4`
export RESET=`tput sgr0`

function mvn-color() {
    ( mvn $@ | awk "BEGIN { RS = \" \" } ; { sub(/\[INFO\]/, \"${BLUE}[INFO]${RESET}\"); printf \"\%s \", \$0 }" )
}

mvn-color archetype:generate

示例输出(所有初始[INFO]在外壳中以蓝色显示),其中<enter>标记程序要求输入的位置:

$ ./color-maven
[INFO] Scanning for projects...
[...cut...]
1192: remote -> uk.ac.rdg.resc:edal-ncwms-based-webapp (-)
<enter>
Choose a number or apply filter: 497: Choose org.apache.maven.archetypes:maven-archetype-quickstart version:
1: 1.1

在上文中,文本Choose a number or apply filter: 497:是某些用户输入的提示。将其与mvn命令的正常执行进行比较,而不使用我的脚本:

$ mvn archetype:generate
[INFO] Scanning for projects...
[...cut...]
1192: remote -> uk.ac.rdg.resc:edal-ncwms-based-webapp (-)
Choose a number or apply filter: 497: <enter>
Choose org.apache.maven.archetypes:maven-archetype-quickstart version:
1: 1.1

如果我使用mvn脚本处理awk的输出,为什么提示不会立即显示在屏幕上?如何保留原始mvn命令的相同输出结构并仅修改所有行的初始[INFO]字符串?

0 个答案:

没有答案