The classic case of what you can do with 'sed':
sed -n '/^!--- Marker two --!/,/^!--- Marker three --!/{
/^!--- Marker three --!/d;p;}' \
infile > outfile
The only result is if the first marker is displayed more than once in the data. The patterns correspond to the beginning of the section and the beginning of the next section; the commands in braces remove the line to start the second section and print all the other lines.
"w" ( ), :
sed -n -e '/!--- Marker one --!/,/!--- Marker two --!/w file1' \
-e '/!--- Marker three --!/,/!--- Marker four --!/w file2' infile
Etc.