$ csplit --help
Usage: csplit [OPTION]... FILE PATTERN...
Output pieces of FILE separated by PATTERN(s) to files `xx01', `xx02', ...,
and output byte counts of each piece to standard output.
-b, --suffix-format=FORMAT use sprintf FORMAT instead of %d
-f, --prefix=PREFIX use PREFIX instead of `xx'
-k, --keep-files do not remove output files on errors
-n, --digits=DIGITS use specified number of digits instead of 2
-s, --quiet, --silent do not print counts of output file sizes
-z, --elide-empty-files remove empty output files
--help display this help and exit
--version output version information and exit
Read standard input if FILE is -. Each PATTERN may be:
INTEGER copy up to but not including specified line number
/REGEXP/[OFFSET] copy up to but not including a matching line
%REGEXP%[OFFSET] skip to, but not including a matching line
{INTEGER} repeat the previous pattern specified number of times
{*} repeat the previous pattern as many times as possible
A line OFFSET is a required `+' or `-' followed by a positive integer.Using it to split the tycpp samples. (Teach Yourself C++, http://web30.eppg.com/program/zip/tycpp.zip)
csplit -f chp11_ chap11.lst '/^listing /' '{*}'— perfect. for this particular case, still need to remove the listing … at the top fo the cc files, though.