O motivo pelo qual você está vendo a saída do comando original é porque tee
retorna para stdout
, assim como os arquivos especificados. Para descartar isso, você pode colocar >/dev/null
no final do comando ou redirecionar essa saída para uma das suas substituições de processo adicionando um >
extra, por exemplo:
command | tee >(sed -rn 's/.*foo (bar).*/1/p') > >(awk '{print $3}')
Ou mais simples, basta usar outro canal:
command | tee >(sed -rn 's/.*foo (bar).*/1/p') | awk '{print $3}'
Quanto a combinar o resultado das duas substituições de processo usando paste
, a menos que haja algum truque de shell obscuro que eu não saiba, não há como fazer isso sem usar um pipe nomeado. Em última análise, são duas linhas (formatadas para mais para clareza):
mkfifo /tmp/myfifo
command |
tee >(sed -rn 's/.*foo (bar).*/1/p' >/tmp/myfifo) |
awk '{print $3}' |
paste /tmp/myfifo -
Se você está colocando isso em um script, considere também usar as recomendações para criar um canal nomeado temporário aqui .