После обработки tee
видите ли вы, какие строки следует исключить?
Когда вы знаете это только тогда, когда обрабатываете оператор 2, похоже, что вам нужно изменить каждый оператор.
rm "logdir/logfile.log"
{
echo 1 2>&1 | tee "logdir/logfile.log"
echo 2 2>&1
echo 3 2>&1 | tee -a "logdir/logfile.log"
} 2>&1
echo ===
echo "Contents File "logdir/logfile.log"
cat "logdir/logfile.log"
Когда оператор 2 показывает различный вид вывода, вы можете сосредоточиться начто
rm "logdir/logfile.log"
{
echo 1 useful
echo 2 debug
echo 3 this I want
} 2>&1 | tee >(grep -Ev "debug|trace|other garbage" > "logdir/logfile.log")
echo ===
echo "File "logdir/logfile.log":"
cat "logdir/logfile.log"
Когда вы не знаете, что скажет утверждение 2, но хотите отфильтровать это без изменения других строк, вы можете обойти это решение:
rm "logdir/logfile.log"
{
echo 1 useful
echo 2 debug | sed 's/^/FREEZE/'
echo 3 this I want
} 2>&1 | tee >(grep "^FREEZE" > "logdir/logfile.log") | sed 's/^FREEZE//'
echo ===
echo "File "logdir/logfile.log":"
cat "logdir/logfile.log"