Как найти строку, вытащить ее и использовать в качестве переменной - PullRequest
1 голос
/ 10 июля 2019

Я работаю с конфигурациями маршрутизатора, и мне нужно написать скрипт Python для циклического перебора файла конфигурации, поиска определенной строки для определенного элемента, в данном случае IP-адреса, сохранения его в качестве переменной, а затем использования этой переменной в другой строке. Например:

interface Vlan88
  ip address 12.37.221.1 255.255.255.0
  !
  !
  standby 1 ip (insert ONLY 12.37.221.1 here)

И сделать то же самое для любого и всех других интерфейсов

Я буду честен .... сейчас пытается == 0, потому что это за пределами моего уровня знаний. Однако я использую регулярное выражение для замены некоторых вспомогательных адресов, а также для написания части конфигурации HSRP. Но я недостаточно далеко, чтобы знать, как искать что-то конкретное и превращать его в переменную.

Ответы [ 4 ]

0 голосов
/ 11 июля 2019

Если я правильно понимаю проблему, вы хотите вставить первый IP-адрес после "standby 1 ip". Вы можете добиться этого с помощью групп сбора регулярных выражений:

data = '''
interface Vlan88
  ip address 12.37.221.1 255.255.255.0
  !
  !
  standby 1 ip'''

import re

new_data = re.sub(r'(?<=ip address )([\d.]+)(.*)(standby 1 ip)', r'\1\2\3 \1', data, flags=re.DOTALL)

print(new_data)

Печать:

interface Vlan88
  ip address 12.37.221.1 255.255.255.0
  !
  !
  standby 1 ip 12.37.221.1

Вы можете увидеть внутреннюю работу этого регулярного выражения на Regex101 (ссылка).

0 голосов
/ 11 июля 2019

добро пожаловать в переполнение стека!

Для этой проблемы вы могли бы ...

  • Загрузить данные файла конфигурации в строковую переменную, возможно, contents
  • Используйте строковый метод .find() для поиска конкретного ключевого слова, такого как ip address
  • Используйте индексирование для получения следующего набора данных: так как .find() возвращает индекс целевого слова, вы можете затем перейти к получению следующих слов, пока вы не нажмете символ конца строки, вероятно, по крайней мере \n

Вот несколько связанная с этим проблема, которая может вам помочь, если вам нравится Это также может помочь

0 голосов
/ 11 июля 2019

Как правило, при сопоставлении с re, например, с использованием re.search(...) вы указываете шаблон и целевую строку. В шаблоне вы указываете структуру искомой строки, и при использовании (...) внутри вашего шаблона это создает группы захвата , которые могут быть впоследствии получены. Например:

s = "ip address 12.37.221.1 255.255.255.0"
mtch = re.search("ip address (\d+.\d+.\d+.\d+) .*")
print(mtch.group(0))
-> ip address 12.37.221.1 255.255.255.0
print(mtch.group(1))
-> 12.37.221.1

group(0) всегда соответствует полному совпадению, а затем идут все ваши группы захвата.

Для получения более подробной информации и примеров прочитайте этот раздел поваренной книги

0 голосов
/ 11 июля 2019

Сначала вы должны проверить, существует ли строка в вашем конфигурационном файле, и, если это так, объединить ее с другой строкой:

if <STRING> in open(<CONFIG FILE>).read():
      ip = <STRING>
     some_other_string += ip
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...