Using regex to tell csplit where to split the file Using regex to tell csplit where to split the file bash bash

Using regex to tell csplit where to split the file


You could use a regular expression that matches until the end of the line ($)

What do you think about:

csplit -k products.txt '/^title:/' {99}


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.


Try using {*} instead of {99} to fix match not found problem.