На конференции администраторов крупных систем LISA (Usenix Large Installation System Administration) два исследователя из Дартмутского университета выступили с идеей создания расширенных вариантов утилит diff и grep для обработки сложных типов данных. В настоящее время утилиты ещё находятся на этапе создания работающих прототипов, доступен только восьмистраничный документ с подробным описанием сути проекта. Код будет открыт после завершения разработки. Работа ведётся при финансировании от компании Google и Министерства энергетики США.

Развиваемые в рамках проекта контекстно независимый вариант утилиты Grep (bgrep) и иерархический Diff (bdiff), ориентированы на разбор синтаксических блоков кода, вместо манипулирования однострочными записями. Таким образом bdiff и bgrep могут оперировать частями файлов конфигураций, логов и других наборов данных, состоящих из логически связанных многострочных блоков. В качестве примеров таких связанных блоков можно привести параметры сетевых интерфейсов в Cisco IOS или настройки виртуальных хостов Apache.

Для работы с такими связанными наборами данных стандартные diff и grep не подходят, так как являются слишком низкоуровневыми инструментами, не учитывающими структуры при оценке различий или организации поиска. При замене порядка следования настроек в блоке, обычная утилита diff отобразит наличие различий, в то время как фактически данные останутся неизменными. Например, в настройки может быть внесено всего два изменения, но за счет перемещения окружающих изменение данных, diff может отобразить десяток изменений, что существенно затрудняет выявление фактических отличий. В случае grep трудности связаны с невозможностью охватить в одном регулярном выражении нескольких элементов в рамках одного уровня вложенности структур или учесть данные, зависимые от определённого параметра.

Источник: http://www.opennet.ru/opennews/art.shtml?num=32513