Você pode usar awk
para isso.
command | awk '{ if (/pattern/) { print > "match" } else { print > "nomatch" } }'
Existe um script / programa / utilitário já disponível para o seguinte requisito de maneira otimizada?
someCommand |
tee >(grep "pattern" > LinesWhichMatch) |
grep -v "pattern" > LinesWhichDoesNotMatch
Aqui está um exemplo de sed
:
Nota: o comando w
do sed irá sobrescrever um arquivo existente sempre que o script for executado, mas somente se esse comando de gravação específico for acionado; daí o rm
rm -f file-{yes,not}
sed -ne '/pattern/bY; w file-not' -e 'b; :Y; w file-yes' file
Você pode acrescentar arquivos no awk:
awk '{if (/pattern/) print >>"matched"; else print >>"unmatched"; }
ou menor:
awk '{print >>(/pattern/?"matched":"unmatched")}'
Tags grep text-processing tee