У меня есть документация для формата файлов HDF5, написанная на языке точек GraphViz.(Это C-подобный язык с множеством фигурных скобок.) Этот мастер-файл содержит множество таких элементов:
subgraph cluster_clustername {
...
lots of stuff including more curly braces spanning multiple lines
...
}
, которые я хочу извлечь из этого блока текста на основе имени кластера.(Я хотел бы создавать графики этих подграфов отдельно, а не сверхбольшие графы, содержащие все. Каждый кластер подграфа представляет собой отдельный файл HDF5, который связан через внешние программные ссылки HDF5.)
Должен быть способ извлечьэтот желаемый кусок текста (упражнение по сопоставлению первого {после некоторого определенного шаблона текста и закрытия} по нескольким строкам с вложенностью. Похоже, что это должно быть относительно распространенной задачей из-за распространенности C и C-подобных языков.
На мой взгляд, наиболее подходящими инструментами для достижения этой цели являются:
awk
python
gvpr - редактор потоков графиков, предоставляемый с Graphviz (но это не поможет другим, скажем, программисты на C с таким же вопросом, и в Интернете существует несколько примеров, а синтаксис сбивает с толку)
sed
В настоящее время я поддерживаю основной файл, затем обновляю каждый из производных файлов в Emacsиспользуя Mx ediff-region-linewise, но мне нужен автоматизированный (чтобы я мог использовать Make для создания файлов документации) и надежный метод генерации производных файлов.Единственный вышеописанный инструмент, с которым у меня есть скромный опыт, это sed , но поскольку шаблон сложен и занимает несколько строк, я думаю, что такой инструмент, как awk или python, может лучше подойти для этой задачи.
На самом деле я попробовал метод, похожий на подсчет ссылок в awk, но у меня возникли проблемы с пониманием некоторых более тонких способов поведения awk, и в прошлом я действительно использовал только вкладки awk one.
Заранее большое спасибоза любую помощь у вас есть.-Z