Вы можете разделить файлы на основе содержимого строки с помощью csplit
. Это команда POSIX , но версия GNU имеет несколько полезных расширений. Используя GNU csplit (невстроенный Linux, Cygwin), вот как разделить файл на каждую строку, которая начинается с
csplit -f 'virtualhost-' -b '%03d.conf' all-sites.conf '/^ *
Переносимо, это более неудобно. Вы должны подсчитать количество вхождений, и имена выходных файлов заканчиваются последовательностью цифр.
csplit -f 'virtualhost-' all-sites.conf '/^ *
В любом случае первый файл содержит все до первой строки
csplit
недостаточно умен для этого, не говоря уже о том, чтобы выяснить, применяется ли комментарий к предыдущему или последующему контенту.
Если вы хотите сделать что-то более интересное, например называть выходные файлы после содержимого, вы можете использовать awk. Утилита csplit иногда бывает удобной, но awk может делать все, что может, без особого труда.
awk '
BEGIN {output_file = "preamble.conf"}
/^ *]/ {
output_file = "virtualhost-" sub(/ *[:>].*/, "", sub(/^ *output_file}
' all-sites.conf