Мне было поручено программно разделить основной шаблон HTML на подшаблоны, выполнить некоторые незначительные изменения каждого шаблона и сохранить полученные файлы.
Почему я использую Bash (вы можете пропустить это, чтобы перейти к вопросу)
(отредактировано) Выбор использования Bash довольно произвольный.Я знаю, что работает Red Hat 5.5, поэтому я пишу сценарий Bash.У него есть интерпретатор PHP, но я решил не использовать PHP для этого, так как тот же сервер будет размещать сайт, который использует PHP и, вероятно, будет видеть большой трафик, поэтому я боюсь подключать сокет FastCGI каждыйчас выполнения этой операции (я не контролирую частоту выполнения скрипта, только то, что выполняется).Я также могу установить любой интерпретатор, который мне нужен (языки сценариев, которые я на самом деле знаю уже: Perl, Python, PHP, возможно Lua).Это, однако, другой вопрос.В этом вопросе предполагается, что я хочу использовать скрипт Bash.
Проблема
У меня есть файл основного шаблона, который выглядит примерно так:
<!DOCTYPE html PUBLIC .... >
<html lang="en" ...>
<head> ... </head>
<body>
<div id=...></div>
<div id=...></div>
</body>
</html>
Исходя из этого, мне нужно проанализировать верхнюю часть документа до </head>
, вырезать несколько строк из этого раздела и добавить одну, заменить местозаполнитель <title>
на фактический заголовок и сохранить его в файл.,Затем мне нужно разобрать <body>
и сначала <div>
как отдельный файл, а затем, наконец, второй <div>
(в который мне также нужно внести некоторые изменения в нижний колонтитул страницы).Я буду отбрасывать </body>
и </html>
, так как этот шаблон на самом деле является частью двухслойного шаблона (в замененном заголовке страницы будет использоваться переменная Smarty для получения текста).
Загадка
Вопрос в том, есть ли более простой / лучший способ сделать это, чем регулярное выражение?Я знаю, что Bash предоставляет составные команды [[ htmlstring =~ "/regex/" ]]
и ${BASH_REMATCH}
для сопоставления или замены, но я также знаю, что синтаксический анализ HTML с помощью регулярных выражений обычно плохая идея .