Existem muitas maneiras de conseguir isso.
Usando o awk
O seguinte envia as linhas correspondentes a coolregex
para o arquivo1. Todas as outras linhas vão para o arquivo2:
./mycommand.sh | awk '/[coolregex]/{print>"file1";next} 1' >file2
Como funciona:
-
/[coolregex]/{print>"file1";next}
Todas as linhas que correspondem à expressão regular
coolregex
são impressas emfile1
. Então, pulamos todos os comandos restantes e pulamos para começar de novo na linhanext
. -
1
Todas as outras linhas são enviadas para a stdout.
1
é a abreviação enigmática do awk para imprimir na linha.
A divisão em vários fluxos também é possível:
./mycommand.sh | awk '/regex1/{print>"file1"} /regex2/{print>"file2"} /regex3/{print>"file3"}'
Usando a substituição de processos
Isso não é tão elegante quanto a solução awk, mas, para completar, também podemos usar vários greps combinados com a substituição de processos:
./mycommand.sh | tee >(grep 'coolregex' >File1) | grep -v 'coolregex' >File2
Também podemos dividir em vários fluxos:
./mycommand.sh | tee >(grep 'coolregex' >File1) >(grep 'otherregex' >File3) >(grep 'anotherregex' >File4) | grep -v 'coolregex' >File2