lnum=$(($(sed -n '/^---$/=' file | sed '$!d') +1)); sed -n "${lnum},$ p" file
Los primeros sed
números de línea de salida de las líneas "---" ...
El segundo sed
extrae el último número de la salida del primer sed ...
Agregue 1 a ese número para obtener el inicio de su bloque "ccc" ...
El tercero salidas 'sed' desde el inicio del bloque "ccc" a EOF
Actualización (con información modificada sobre los métodos de Gilles)
Bueno, me preguntaba cómo se desempeñaría Glenn Jackman tac
, así que probé las tres respuestas (al momento de escribir) ... El archivo de prueba contenía 1 millón de líneas (de sus propios números de línea).
Todas las respuestas hicieron lo que se esperaba ...
Aquí están los tiempos ...
Gilles sed
(pase único)
# real 0m0.470s
# user 0m0.448s
# sys 0m0.020s
Gilles awk
(pase único)
# very slow, but my data had a very large data block which awk needed to cache.
Gilles 'dos pasos' (primer método)
# real 0m0.048s
# user 0m0.052s
# sys 0m0.008s
Gilles 'dos pasos' (segundo método) ... muy rápido
# real 0m0.204s
# user 0m0.196s
# sys 0m0.008s
Gilles 'dos pasos' (tercer método)
# real 0m0.774s
# user 0m0.688s
# sys 0m0.012s
Gilles 'gawk' (método RT) ... muy rápido , pero no es POSIX.
# real 0m0.221s
# user 0m0.200s
# sys 0m0.020s
Glenn Jackman ... muy rápido , pero no es 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
funciona bien, pero no puedoawk
ejecutar el ejemplo; se cuelga ... y obtengo un error en el 3er ejemplo:cut -f ':' -t 1
... corte: opción no válida - 't'