stderrの特定の部分だけを記録しますか?

stderrの特定の部分だけを記録しますか?

関連情報が見つかりませんでしたが、stderrの特定の部分だけをファイルに書き込もうとしています。例えば

実行しtar -xzf file 2>> log.txtてエラーが発生しました

tar: Child returned status 1

コマンド名なしでChildが返した状態の1部分だけを記録したいと思います。

答え1

tar -xzf file 3>&1 1>&2 2>&3 | grep -oP '^app: \K.*$' | tee logfile

答え2

を使用すると、zsh次のことができます。

tar -xzf file 2> >(sed 's/^tar: //' >> file.log)

これにより終了tarステータスが保存されます。

あなたはこれを行うことができますkshbashyashsedこのコマンドを使用する場合file.log

他のオプションはbash以下を使用することです:

{ tar -xzf file 2>&1 >&3 3>&- | sed 's/^tar: //' >> file.log 3>&-; } 3>&1
tar_exit_status=${PIPESTATUS[0]}

tar複数のシェルの場合は、空のargv [0]を使用して呼び出すこともできます。

(exec -a '' tar -xzf file)

この場合、エラーメッセージは次のようになります。

: Child returned status 1

関連情報