lnum=$(($(sed -n '/^---$/=' file | sed '$!d') +1)); sed -n "${lnum},$ p" file
Các sed
số dòng đầu tiên của các dòng "---" ...
Số thứ hai sed
trích xuất số cuối cùng từ đầu ra của sed đầu tiên ...
Thêm 1 vào số đó để bắt đầu khối "ccc" của bạn ...
Thứ ba đầu ra 'sed' từ khi bắt đầu khối "ccc" sang EOF
Cập nhật (với các phương pháp Gilles thông tin được tăng cường)
Vâng tôi đã wondereing về cách glenn jackman của tac
sẽ thực hiện, vì vậy tôi thời gian thử nghiệm ba câu trả lời (tại thời điểm viết bài) ... Các tập tin thử nghiệm (s) mỗi chứa 1 triệu dòng (số dòng riêng của họ).
Tất cả các câu trả lời đã làm những gì được mong đợi ...
Đây là thời gian ..
Gilles sed
(chuyền đơn)
# real 0m0.470s
# user 0m0.448s
# sys 0m0.020s
Gilles awk
(chuyền đơn)
# very slow, but my data had a very large data block which awk needed to cache.
Gilles 'hai-pass' (phương pháp đầu tiên)
# real 0m0.048s
# user 0m0.052s
# sys 0m0.008s
Gilles 'hai-pass' (phương pháp thứ hai) ... rất nhanh
# real 0m0.204s
# user 0m0.196s
# sys 0m0.008s
Gilles 'hai-pass' (phương pháp thứ ba)
# real 0m0.774s
# user 0m0.688s
# sys 0m0.012s
Gilles 'gawk' (phương pháp RT) ... rất nhanh , nhưng không phải là POSIX.
# real 0m0.221s
# user 0m0.200s
# sys 0m0.020s
glenn jackman ... rất nhanh , nhưng không phải là 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
đang hoạt động tốt, nhưng tôi không thể lấyawk
ví dụ để chạy; nó bị treo ... và tôi gặp lỗi trong ví dụ thứ 3:cut -f ':' -t 1
... cut: tùy chọn không hợp lệ - 't'