Using regex to tell csplit where to split the file
csplit reads the input file one line at a time and applies the regex to each line. It is therefore not possible to match a regex across multiple lines.
One way around this is to massage the input file first, replacing ---\ntitle:
with a single line pattern that csplit can match. For example, using sed:
sed 'N;s/---\ntitle: /===\n' products.txt | csplit -k - '/===/' {*}sed 'N;s/===\n/---\ntitle: /' -i xx*
This replaces ---\ntitle:
with a single line ===
, then has csplit split when it sees that pattern. Passing -
as a file name tells csplit to read from stdin. The second sed command reverses the change.