lnum=$(($(sed -n '/^---$/=' file | sed '$!d') +1)); sed -n "${lnum},$ p" file
I primi sed
numeri di riga di output delle righe "---" ...
Il secondo sed
estrae l'ultimo numero dall'output del primo sed ...
Aggiungi 1 a quel numero per ottenere l'inizio del blocco "ccc" ...
Il terzo 'sed' emette dall'inizio del blocco "ccc" su EOF
Aggiornamento (con informazioni aggiornate sui metodi Gilles)
Beh, mi chiedevo come si tac
sarebbe comportato Glenn Jackman , quindi ho testato nel tempo le tre risposte (al momento della stesura) ... I file di test contenevano ciascuno 1 milione di righe (dei loro numeri di riga).
Tutte le risposte hanno fatto come previsto ...
Ecco i tempi ..
Gilles sed
(passaggio singolo)
# real 0m0.470s
# user 0m0.448s
# sys 0m0.020s
Gilles awk
(passaggio singolo)
# very slow, but my data had a very large data block which awk needed to cache.
Gilles 'a due passaggi' (primo metodo)
# real 0m0.048s
# user 0m0.052s
# sys 0m0.008s
Gilles 'a due passaggi' (secondo metodo) ... molto veloce
# real 0m0.204s
# user 0m0.196s
# sys 0m0.008s
Gilles 'a due passaggi' (terzo metodo)
# real 0m0.774s
# user 0m0.688s
# sys 0m0.012s
Gilles 'gawk' (metodo RT) ... molto veloce , ma non è POSIX.
# real 0m0.221s
# user 0m0.200s
# sys 0m0.020s
glenn jackman ... molto veloce , ma non è 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
funziona bene, ma non riesco a far funzionare l'awk
esempio; si blocca ... e viene visualizzato un errore nel terzo esempio:cut -f ':' -t 1
... cut: opzione non valida - 't'