抑制包含特定字符串的命令输出行

抑制包含特定字符串的命令输出行

当我在 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

为了补充 cmks 的答案,如果您还希望返回代码是 frommycommand而不是 from grep,则可以使用pipefail并忽略 from 的返回状态grep(当找不到要抑制的字符串时)

(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

相关内容