$ 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.