0

すべてを 1 つのストリームに出力するツールがあります。ツールは Apache Maven です。ストリームは次のようになります。

[INFO] ...
[INFO] ...
[WARNING] ...
[ERROR] ...

これを 2 つのストリームに分割したいと思います。2 番目のストリーム (stderr) は で始まるすべての行を取得し[ERROR]、最初のストリーム (stdout) は残りを取得します。

$ mvn | splitter "^\[ERROR\]" 1>stdout.txt 2>stderr.txt

Linux に役立つすぐに使えるツールはありますか? または、カスタム スクリプトを作成する必要がありますか?

4

3 に答える 3

3

これをすぐに実行できるものは知りませんが、非常に単純なスクリプトです。

errorRE=$1
while read line
do
    if [[ $line =~ $errorRE ]]
    then printf "%s" "$line" >&2
    else printf "%s" "$line"
    fi
done
于 2013-09-01T15:29:04.083 に答える
1

スクリプトを書くのは簡単です。行ごとに比較するだけです:

mvn | awk '/^\[ERROR\]/ { print  > "/dev/stderr"; next; }; 1'

バッシュ:

mvn | while IFS= read -r LINE; do [[ $LINE == '[ERROR]'* ]] && { echo "$LINE" >&2; continue; }; echo "$LINE"; done

関数として:

function splitter {
    local IFS= LINE
    while read -r LINE; do
        [[ $LINE == '[ERROR]'* ]] && {
             echo "$LINE" >&2
             continue
        }
        echo "$LINE"
    done
}

mvn | splitter

関数をスクリプトの一部として保存してソースにする. splitter.sh~/.bashrc、お好みで rc ファイルに保存することができます。

于 2013-09-01T15:29:14.463 に答える
0

Apache Maven 3.1 では、ロギング フレームワークが変更されました。詳細については、 http://maven.apache.org/maven-logging.htmlを参照してください。したがって、ロガーが出力を異なるファイルに分割できる場合、Maven も分割できます。

于 2013-09-01T16:44:39.380 に答える