bash command to grep something on stderr and save the result in a file

I am running a program called stm. I want to save only those stderr messages that contain the text "ERROR" in a text file. I also want the messages on the console.

How do I do that in bash?

Answers


Use the following pipeline if only messages containing ERROR should be displayed on the console (stderr):

stm |& grep ERROR | tee -a /path/to/logfile

Use the following command if all messages should be displayed on the console (stderr):

stm |& tee /dev/stderr | grep ERROR >> /path/to/logfile

Edit: Versions without connecting standard output and standard error:

stm 2> >( grep --line-buffered ERROR | tee -a /path/to/logfile >&2 )
stm 2> >( tee /dev/stderr | grep --line-buffered ERROR >> /path/to/logfile )

Need Your Help