Как найти определенный блок интерфейса в конфигурации Cisco IOS с определенными критериями?

Надеюсь, это поможет.

local_root=/var/www/ftp/$USER
user_sub_token=$USER
2
06.01.2021, 18:44
1 ответ

Вы можете использовать awkдля цели:

awk 'BEGIN{RS="!\n";FS=OFS="\n"}
     {for (i=i;i<=NF;i++) {if ($i~/^ *(shutdown|switchport access vlan [[:digit:]]+|switchport mode access) *$/) next}}
     NF' cisco.txt

Это будет обрабатывать строки с !как разделитель записей и считывать весь «абзац», связанный с одним интерфейсом за раз. Запись будет разбита на «поля» построчно, т.е. одна строка интерпретируется как одно «поле».

Затем программа перебирает все поля и, если какой-либо из ваших шаблонов найден, пропускает выполнение до следующей записи. Если ни одно из ключевых слов не найдено, и хотя бы одна строка в абзаце(NFне равна -нулю; это сделано для предотвращения вывода пустых записей ), абзац печатается. Для вашего примера:

user@host~$ awk 'BEGIN{RS="!\n";FS=OFS="\n"} {for (i=i;i<=NF;i++) {if ($i~/^ *(shutdown|switchport access vlan [[:digit:]]+|switchport mode access) *$/) next}} NF' cisco.txt
interface FastEthernet0/4

Если вы хотите убедиться, что печатаете только строку, содержащую оператор interface, измените NFна

NF {print $1}

или даже более избирательно

NF && $1~/interface/ {print $1}

Обновление

Второй пример, который вы разместили в своем обновлении, использует другой формат файла (разделитель теперь изменен, и могут быть разделы, отличные от interface), поэтому предложенное выше решение там не работает. Вместо этого попробуйте следующее:

awk 'BEGIN{RS="";FS=OFS="\n"}
     {for (i=i;i<=NF;i++) {if ($i~/^ *(switchport mode trunk|switchport mode access|switchport access vlan ) *$/) next}}
     NF && $1~/interface/ {print $1}' cisco2.txt

Это устанавливает разделитель записей на пустую строку, но в остальном работает так же, как и выше. Однако вывод производится только в том случае, если раздел начинается с interface(, чтобы исключить строку hostname, например. )и снова ()напечатает только первую строку, содержащую оператор interface.

2
18.03.2021, 22:38

Теги

Похожие вопросы