lnum=$(($(sed -n '/^---$/=' file | sed '$!d') +1)); sed -n "${lnum},$ p" file
Die erste sed
Ausgabe gibt die Zeilennummern der "---" Zeilen aus ...
Die zweite sed
extrahiert die letzte Nummer aus der Ausgabe des ersten Sed ...
Addieren Sie 1 zu dieser Nummer, um den Start Ihres "ccc" -Blocks zu erhalten ...
Die dritte 'sed' gibt vom Anfang des "ccc" -Blocks an EOF aus
Update (mit geänderten Informationen zu Gilles-Methoden)
Nun, ich habe darüber nachgedacht, wie sich Glenn Jackmans verhalten tac
würde, also habe ich die drei Antworten (zum Zeitpunkt des Schreibens) zeitgetestet ... Die Testdatei (en) enthielten jeweils 1 Million Zeilen (mit ihren eigenen Zeilennummern).
Alle Antworten haben das getan, was erwartet wurde ...
Hier sind die Zeiten ..
Gilles sed
(Einzelpass)
# real 0m0.470s
# user 0m0.448s
# sys 0m0.020s
Gilles awk
(Einzelpass)
# very slow, but my data had a very large data block which awk needed to cache.
Gilles 'Zwei-Pass' (erste Methode)
# real 0m0.048s
# user 0m0.052s
# sys 0m0.008s
Gilles 'Two-Pass' (zweite Methode) ... sehr schnell
# real 0m0.204s
# user 0m0.196s
# sys 0m0.008s
Gilles 'Zwei-Pass' (dritte Methode)
# real 0m0.774s
# user 0m0.688s
# sys 0m0.012s
Gilles 'gawk' (RT-Methode) ... sehr schnell , aber nicht POSIX.
# real 0m0.221s
# user 0m0.200s
# sys 0m0.020s
Glenn Jackman ... sehr schnell , ist aber nicht 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
funktioniert gut, aber ich kann dasawk
Beispiel nicht zum Laufen bringen; es hängt ... und ich erhalte eine Fehlermeldung im 3. Beispiel:cut -f ':' -t 1
... cut: ungültige Option - 't'