Unterdrücken Sie Befehlsausgabezeilen, die eine bestimmte Zeichenfolge enthalten

Unterdrücken Sie Befehlsausgabezeilen, die eine bestimmte Zeichenfolge enthalten

Wenn ich unter Linux einen beliebigen Befehl im Terminal ausführe, gibt es eine Möglichkeit, Ausgabemeldungen zu unterdrücken, die einen bestimmten Satz enthalten?

Ich habe es versucht

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

aber die Nachrichten waren immer noch da.

Antwort1

Möglicherweise ist der unerwünschte Teil nicht Teil der Ausgabe an stderr, sondern an stdout.

Versuchen:

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

Sie können stderr und stdout an verschiedene Ziele weiterleiten. So können Sie sehen, woher die Ausgabe kommt:

./mycommand > >(grep -v "Ich möchte das nicht sehen" > stdout.log) 2> >(grep -v "Ich möchte das nicht sehen" > stderr.log)

Antwort2

Als Ergänzung zur Antwort von cmks: Wenn Sie auch möchten, dass der Rückgabecode der von mycommandund nicht der von ist grep, können Sie pipefailden Rückgabestatus von verwenden und ignorieren grep(für den Fall, dass die zu unterdrückende Zeichenfolge nicht gefunden wird).

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

Beispiele:

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

    • Standardausgabe: nada
    • zurückkehren:1
  • (set -o pipefail; (echo "REMOVE" && true 2>&1) | { grep -v "REMOVE" || true; })

    • Standardausgabe: nada
    • zurückkehren:0
  • (set -o pipefail; (echo "KEEP" && false 2>&1) | { grep -v "REMOVE" || true; })

    • stdout:KEEP
    • zurückkehren:1
  • (set -o pipefail; (echo "KEEP" && true 2>&1) | { grep -v "REMOVE" || true; })

    • stdout:KEEP
    • zurückkehren:0

verwandte Informationen