grep cisco интерфейсы без какой-либо конфигурации - PullRequest
1 голос
/ 20 января 2020

Это образец файла конфигурации Cisco Switch. Если интерфейс не используется, он должен быть в режиме shutdown.

config.txt

!
interface GigabitEthernet0/0
 shutdown
!
interface GigabitEthernet0/1
!
interface GigabitEthernet0/2
 shutdown
!
interface GigabitEthernet0/3 
!

Поэтому я хотел бы выполнить любые интерфейсы grep без какой-либо конфигурации и без shutdown в нем.

Желаемый вывод

!
interface GigabitEthernet0/1
!
!
interface GigabitEthernet0/3 
!

Можно ли сделать что-то вроде grep interface.*[0-9] config.txt, где строка до и после нее должна match !

Вот несколько моих попыток, но ни одна из них не привела к желаемому результату.

grep interface.*[0-9] config.txt
grep -C1 interface.*[0-9] config.txt

Если есть лучшее решение, тогда grep, пожалуйста дайте мне знать.

1 Ответ

1 голос
/ 20 января 2020

Я предлагаю использовать решение GNU grep (или pcregrep, если у вас нет доступа к GNU grep):

grep -Poz '(?m)^!\R\Kinterface.*\R(?=!$)' file

См. online grep demo и демонстрация регулярных выражений .

Подробности

  • -Poz - P позволяет механизму PCRE regex обрабатывать регулярные выражения , o заставляет выводить только соответствующий текст, а z позволяет grep работать с сопоставлением шаблонов через разрывы строк
  • (?m)^!\R\Kinterface.*\R(?=!$) совпадений:
    • (?m) - создание модификатора ^ соответствует началу строки и $ соответствует концу строки
    • ^ - начало строки
    • ! - ! char
    • \R - последовательность разрыва строки
    • \K - оператор сброса совпадений, который пропускает весь сопоставленный текст в текущем согласованном текстовом буфере
    • interface - слово
    • .* - остаток строки
    • \R - последовательность разрыва строки
    • (?=!$) - позитивный прогноз, который гарантирует, что за ним следует ! char с конца строки .
...