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
coolregexsão impressas emfile1. Então, pulamos todos os comandos restantes e pulamos para começar de novo na linhanext. -
1Todas 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