特定の文字列を含むコマンド出力行を抑制します

特定の文字列を含むコマンド出力行を抑制します

Linux のターミナルで任意のコマンドを実行するときに、特定の文を含む出力メッセージを抑制する方法はありますか?

私は試した

./mycommand | grep -v "I dont want to see this"

しかし、メッセージはまだ残っていました。

答え1

おそらく、不要な部分は stderr ではなく stdout への出力の一部です。

試す:

./mycommand 2>&1 | grep -v "I dont want to see this"

stderr と stdout を異なるターゲットにパイプすることができます。そのため、出力がどこから来ているのかを確認できます。

./mycommand > >(grep -v "これは見たくない" > stdout.log) 2> >(grep -v "これは見たくない" > stderr.log)

答え2

mycommandcmksの回答に追加すると、戻りコードを からではなく からのものにもしたい場合は、からの戻りステータスをgrep使用して無視することができます(抑制する文字列が見つからない場合)。pipefailgrep

(set -o pipefail; (./mycommand  2>&1) | { grep -v "I dont want to see this" || true; })

例:

  • (set -o pipefail; (echo "REMOVE" && false 2>&1) | { grep -v "REMOVE" || true; })

    • 標準出力: なし
    • 戻る:1
  • (set -o pipefail; (echo "REMOVE" && true 2>&1) | { grep -v "REMOVE" || true; })

    • 標準出力: なし
    • 戻る:0
  • (set -o pipefail; (echo "KEEP" && false 2>&1) | { grep -v "REMOVE" || true; })

    • 標準出力:KEEP
    • 戻る:1
  • (set -o pipefail; (echo "KEEP" && true 2>&1) | { grep -v "REMOVE" || true; })

    • 標準出力:KEEP
    • 戻る:0

関連情報