- ru
- Language: en
- Documentation version: latest
Синтаксис шаблонов TextFSM
В этом разделе описан синтаксис шаблонов на основе документации TextFSM. В следующем разделе показаны примеры использования синтаксиса. Поэтому, в принципе, можно перейти сразу к следующему разделу, а к этому возвращаться по необходимости, для тех ситуаций, для которых нет примера, и когда нужно перечитать, что означает какой-то параметр.
Шаблон TextFSM описывает, каким образом данные должны обрабатываться.
Любой шаблон состоит из двух частей:
определения переменных
эти переменные описывают, какие столбцы будут в табличном представлении
определения состояний
Пример разбора команды traceroute:
# Определение переменных:
Value ID (\d+)
Value Hop (\d+(\.\d+){3})
# Секция с определением состояний всегда должна начинаться с состояния Start
Start
# Переменные действие
^ ${ID} ${Hop} -> Record
Определение переменных
В секции с переменными должны идти только определения переменных. Единственное исключение - в этом разделе могут быть комментарии.
В этом разделе не должно быть пустых строк. Для TextFSM пустая строка означает завершение секции определения переменных.
Формат описания переменных:
Value [option[,option...]] name regex
Синтаксис описания переменных (для каждой опции ниже мы рассмотрим примеры):
Value
- это ключевое слово, которое указывает, что создается переменная. Его обязательно нужно указыватьoption - опции, которые определяют, как работать с переменной. Если нужно указать несколько опций, они должны быть отделены запятой, без пробелов. Поддерживаются такие опции:
Filldown - значение, которое ранее совпало с регулярным выражением, запоминается до следующей обработки строки (если не было явно очищено или снова совпало регулярное выражение). Это значит, что последнее значение столбца, которое совпало с регулярным выражением, запоминается и используется в следующих строках, если в них не присутствовал этот столбец.
Key - определяет, что это поле содержит уникальный идентификатор строки
Required - строка, которая обрабатывается, будет записана только в том случае, если эта переменная присутствует.
List - значение это список, и каждое совпадение с регулярным выражением будет добавлять в список элемент. По умолчанию каждое следующее совпадение перезаписывает предыдущее.
Fillup - работает как Filldown, но заполняет пустые значение выше до тех пор, пока не найдет совпадение. Не совместимо с Required.
name
- имя переменной, которое будет использоваться как имя колонки. Зарезервированные имена не должны использоваться как имя переменной.regex
- регулярное выражение, которое описывает переменную. Регулярное выражение должно быть в скобках.
Определение состояний
После определения переменных нужно описать состояния:
каждое определение состояния должно быть отделено пустой строкой (как минимум, одной)
первая строка - имя состояния
затем идут строки, которые описывают правила. Правила должны начинаться с двух пробелов и символа
^
Начальное состояние всегда Start. Входные данные сравниваются с текущим состоянием, но в строке правила может быть указано, что нужно перейти к другому состоянию.
Проверка выполняется построчно, пока не будет достигнут EOF (конец файла), или текущее состояние перейдет в состояние End.
Зарезервированные состояния
Зарезервированы такие состояния:
Start - это состояние обязательно должно быть указано. Без него шаблон не будет работать.
End - это состояние завершает обработку входящих строк и не выполняет состояние EOF.
EOF - это неявное состояние, которое выполняется всегда, когда обработка дошла до конца файла. Выглядит оно таким образом:
EOF
^.* -> Record
EOF записывает текущую строку, прежде чем обработка завершается. Если это поведение нужно изменить, надо явно в конце шаблона написать EOF:
EOF
Правила состояний
Каждое состояние состоит из одного или более правил:
TextFSM обрабатывает входящие строки и сравнивает их с правилами
если правило (регулярное выражение) совпадает со строкой, выполняются действия, которые описаны в правиле, и для следующей строки процесс повторяется заново, с начала состояния.
Правила должны быть описаны в таком формате:
^regex [-> action]
В правиле:
каждое правило должно начинаться с двух пробелов и символа
^
. Символ^
означает начало строки и всегда должен указываться явноregex - это регулярное выражение, в котором могут использоваться переменные
для указания переменной, может использоваться синтаксис
$ValueName
или${ValueName}
(этот формат предпочтителен)в правиле на место переменных подставляются регулярные выражения, которые они описывают
если нужно явно указать символ конца строки, используется значение
$$
Действия в правилах
После регулярного выражения в правиле могут указываться действия:
между регулярным выражением и действием должен быть символ
->
действия могут состоять из трех частей в таком формате: L.R S
L - Line Action - действия, которые применяются к входящей строке
R - Record Action - действия, которые применяются к собранным значениям
S - State Transition - переход в другое состояние
по умолчанию используется Next.NoRecord
Line Actions
Line Actions:
Next - обработать строку, прочитать следующую и начать проверять её с начала состояния. Это действие используется по умолчанию, если не указано другое
Continue - продолжить обработку правил, как будто совпадения не было, при этом значения присваиваются
Record Action
Record Action - опциональное действие, которое может быть указано после Line Action. Они должны быть разделены точкой. Типы действий:
NoRecord - не выполнять ничего. Это действие по умолчанию, когда другое не указано
Record - запомнить значения, которые совпали с правилом. Все переменные, кроме тех, где указана опция Filldown, обнуляются.
Clear - обнулить все переменные, кроме тех, где указана опция Filldown.
Clearall - обнулить все переменные.
Разделять действия точкой нужно только в том случае, если нужно указать и Line, и Record действия. Если нужно указать только одно из них, точку ставить не нужно.
State Transition
После действия может быть указано новое состояние:
состояние должно быть одним из зарезервированных или определенных в шаблоне
если входная строка совпала:
все действия выполняются,
считывается следующая строка,
затем текущее состояние меняется на новое, и обработка продолжается в новом состоянии.
Если в правиле используется действие Continue, то в нём нельзя использовать переход в другое состояние. Это правило нужно для того, чтобы в последовательности состояний не было петель.
Error Action
Специальное действие Error останавливает всю обработку строк, отбрасывает все строки, которые были собраны до сих пор, и возвращает исключение.
Синтаксис этого действия такой:
^regex -> Error [word|"string"]