Esta não é a resposta mais simples, esperamos que alguém venha com algo mais puro. Eu montei um pequeno script que fará isso e funcionará no Mac.
#!/bin/bash
NUMFILES='grep '^--.*--' $1 | wc -l'
NUMFILES=$(($NUMFILES - 2))
csplit -k $1 '%^--.*--$%' '/^--.*--$/' "{$NUMFILES}"
for file in 'ls xx*'
do
mv $file "'head -n1 $file | sed -e 's/--\(.*\)--/.txt/''"
done
Isso funciona usando csplit
para dividir o arquivo. A quarta linha basicamente diz ignorar tudo antes da primeira linha de cabeçalho e depois dividir os cabeçalhos depois disso. linhas 2-3 calcular quantas vezes csplit tem que dividir o arquivo.
csplit
nomeia seus arquivos de saída xx seguidos de um número de 2 dígitos. As últimas 4 linhas renomear todos esses arquivos para o que estiver na linha de cabeçalho com o --
removido.