lnum=$(($(sed -n '/^---$/=' file | sed '$!d') +1)); sed -n "${lnum},$ p" file
O primeiro sed
gera números de linha das linhas "---" ...
O segundo sed
extrai o último número da saída do primeiro sed ...
Adicione 1 a esse número para iniciar o bloco "ccc" ...
O terceiro saídas 'sed' desde o início do bloco "ccc" para o EOF
Atualização (com informações recomendadas sobre os métodos Gilles)
Bem, eu estava pensando sobre o desempenho de Glenn Jackman tac
, então testei as três respostas (no momento da redação) ... Os arquivos de teste continham 1 milhão de linhas (de seus próprios números de linhas).
Todas as respostas fizeram o que era esperado ...
Aqui estão os tempos ..
Gilles sed
(passe único)
# real 0m0.470s
# user 0m0.448s
# sys 0m0.020s
Gilles awk
(passe único)
# very slow, but my data had a very large data block which awk needed to cache.
Gilles 'two-pass' (primeiro método)
# real 0m0.048s
# user 0m0.052s
# sys 0m0.008s
Gilles 'two-pass' (segundo método) ... muito rápido
# real 0m0.204s
# user 0m0.196s
# sys 0m0.008s
Gilles 'two-pass' (terceiro método)
# real 0m0.774s
# user 0m0.688s
# sys 0m0.012s
Gilles 'gawk' (método RT) ... muito rápido , mas não é POSIX.
# real 0m0.221s
# user 0m0.200s
# sys 0m0.020s
glenn jackman ... muito rápido , mas não é POSIX.
# real 0m0.022s
# user 0m0.000s
# sys 0m0.036s
fred.bear
# real 0m0.464s
# user 0m0.432s
# sys 0m0.052s
Mackie Messer
# real 0m0.856s
# user 0m0.832s
# sys 0m0.028s
sed
está funcionando bem, mas não consigoawk
executar o exemplo; trava ... e recebo um erro no terceiro exemplo:cut -f ':' -t 1
... cut: invalid option - 't'