lnum=$(($(sed -n '/^---$/=' file | sed '$!d') +1)); sed -n "${lnum},$ p" file
最初のsed行は "---"行の行番号を出力します...
2番目の行sedは最初のsedの出力から最後の番号を抽出します...
1をその番号に追加して "ccc"ブロックの開始を取得します...
3番目「ccc」ブロックの先頭からEOFへの「sed」出力
更新 (Gillesメソッドに関する修正情報を含む)
さて、私は方法についてwondereingたグレン・ジャックマンさんは、 tac私の(執筆時点で)3つの答えを、時間がテストされたので...テストファイル(複数可)はそれぞれ、(自分の行番号の)100万行が含まれ、実行します。
すべての答えは期待通りでした...
ここが時代です
Gilles sed(シングルパス)
# real 0m0.470s
# user 0m0.448s
# sys 0m0.020s
Gilles awk(シングルパス)
# very slow, but my data had a very large data block which awk needed to cache.
ジル ' ツーパス '(最初の方法)
# real 0m0.048s
# user 0m0.052s
# sys 0m0.008s
Gillesの「2パス」(2番目の方法)... 非常に高速
# real 0m0.204s
# user 0m0.196s
# sys 0m0.008s
ジル ' ツーパス '(3番目の方法)
# real 0m0.774s
# user 0m0.688s
# sys 0m0.012s
Gilles 'gawk'(RTメソッド)... 非常に高速ですが、POSIXではありません。
# real 0m0.221s
# user 0m0.200s
# sys 0m0.020s
グレン・ジャックマン ... 非常に高速ですが、POSIXではありません。
# real 0m0.022s
# user 0m0.000s
# sys 0m0.036s
fred.bear
# real 0m0.464s
# user 0m0.432s
# sys 0m0.052s
マッキーメッサー
# real 0m0.856s
# user 0m0.832s
# sys 0m0.028s
sedに動作していますが、awkサンプルを実行できません。それはハングします...そして3番目の例でエラーが発生します:cut -f ':' -t 1...カット:無効なオプション