Suprimir linhas de saída de comando que contêm uma determinada string

Suprimir linhas de saída de comando que contêm uma determinada string

Quando executo um comando arbitrário no terminal do Linux, existe uma maneira de suprimir mensagens de saída que contêm uma determinada frase?

tentei

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

mas as mensagens ainda estavam lá.

Responder1

Talvez a parte indesejada faça parte da saída do stderr, mas do stdout.

Tentar:

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

Você pode canalizar stderr e stdout para destinos diferentes. Então você pode ver de onde vem a saída:

./mycommand > >(grep -v "Não quero ver isso" > stdout.log) 2> >(grep -v "Não quero ver isso" > stderr.log)

Responder2

Para adicionar à resposta do cmks, se você também deseja que o código de retorno seja from mycommande não from grep, você pode usar pipefaile ignorar o status de retorno from grep(para quando a string a ser suprimida não for encontrada)

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

Exemplos:

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

    • saída padrão: nada
    • retornar:1
  • (set -o pipefail; (echo "REMOVE" && true 2>&1) | { grep -v "REMOVE" || true; })

    • saída padrão: nada
    • retornar:0
  • (set -o pipefail; (echo "KEEP" && false 2>&1) | { grep -v "REMOVE" || true; })

    • saída padrão:KEEP
    • retornar:1
  • (set -o pipefail; (echo "KEEP" && true 2>&1) | { grep -v "REMOVE" || true; })

    • saída padrão:KEEP
    • retornar:0

informação relacionada