어제 내용에 이어 오늘은 바로 실습 들어가겠습니다. 정규식은 매우 강력하고 복잡하므로 지난번에 배운 내용의 범위를 벗어나는 이 실험의 부분에 대해서는 관련 문서를 참조하세요. 이 튜토리얼은 운영 및 유지 관리 엔지니어가 빠르게 시작할 수 있도록 돕기 위한 것입니다. 이해하지 못하더라도 직접 교체 도구로 사용할 수도 있습니다.
텔넷 및 SSH 자동 검사 스크립트의 정규식을 검토합니다. DeviceName = re.search('.*(?=#표시 run)',telreply).group(), telreply는 검사 내용이므로 로그 시작 부분을 열면 확인할 수 있습니다.
R1>enable Password: R1#terminal length 0 R1#show run Building configuration...
분명히 이 정규 표현식은 ' #show' 모든 문자(개행 문자 제외)는 물론 R1입니다.
더 복잡한 실험을 수행하고 더 많은 구성 조각을 가로채세요. 예를 들어 다음 구성에서는 이 장치의 각 인터페이스의 IP 주소를 찾아야 합니다.
############################ ! interface FastEthernet0/0 ip address 192.168.1.200 255.255.255.0 duplex half ! interface GigabitEthernet1/0 no ip address shutdown negotiation auto ! interface Serial2/0 ip address 192.168.2.200 255.255.255.0 ! ############################
로그에 할당하세요. 실제 환경은 로그를 직접 읽는 것입니다)
log = ''' #여기에 따옴표 3개가 있습니다. 그런 다음 Enter를 눌러 위 구성을 붙여넣은 다음 따옴표 3개를 입력하고 Enter를 누르세요. (여러 줄 문자열을 붙여넣는 데 따옴표 세 개를 사용할 수 있습니다).
이제 로그를 확인하세요.
>>> log '\n!\ninterface FastEthernet0/0\n ip address 192.168.1.200 255.255.255.0\n duplex half\n!\ninterface GigabitEthernet1/0\n no ip address\n shutdown\n negotiation auto\n!\ninterface Serial2/0\n ip address 192.168.2.200 255.255.255.0\n!\n' >>>
문자열이 모두 한 줄에 있고 줄 바꿈이 실제로 'n'인 것을 확인할 수 있습니다. print(log)를 사용하면 표시 효과는 줄 바꿈을 사용하여 위와 동일합니다.
또한 Cisco 장비의 구성이 느낌표(!)로 구분되어 있는 것을 확인할 수 있습니다. 각 인터페이스의 시작은 'interface'이고, IP 주소 앞에는 'ip'가 있습니다. 주소'. 따라서 특정 인터페이스 구성의 첫 번째 줄과 일치하는 정규식에 '인터페이스(.*)n'이 있다고 상상하는 것은 어렵지 않습니다. 구성은 '!'으로 끝나므로 '!' 앞의 표현식에는 '(?=!)'가 필요합니다. 중간 구성의 줄 수는 가변적입니다. 확실한 것은 최소한 한 줄의 구성이 있고 개행 문자, 즉 '(.*n)+?)'가 있을 것이라는 점입니다. 여기서 '+?'는 이전 표현식(.*n)이 한 번 이상 비탐욕적으로 일치함을 의미합니다. 괄호를 사용하면 캡처 효과를 얻을 수 있지만 캡처 효과를 끄려면 왼쪽 괄호 뒤에 ?:를 추가하면 됩니다. 이 실험은 모든 문자열을 일치시키는 것이므로 're.findall()'을 사용합니다. 더 이상 설명할 필요 없이 다음 코드로 이동하세요.
ljds = re.findall('interface(.*)\n((?:.*\n)+?)(?=!)',log) >>> ljds [(' FastEthernet0/0', ' ip address 192.168.1.200 255.255.255.0\n duplex half\n'), (' GigabitEthernet1/0', ' no ip address\n shutdown\n negotiation auto\n'), (' Serial2/0', ' ip address 192.168.2.200 255.255.255.0\n')]
결과적으로 각 인터페이스의 구성은 인터페이스 이름 + 구성의 튜플로 나뉘어 목록에 중첩됩니다.
다음으로 For 루프를 작성하여 인터페이스와 IP를 다시 가져옵니다.
작업 효과:
테스트 완료! 각 인터페이스의 IP 주소를 얻는 목적이 달성되었습니다.
이제 이 방법을 배웠으므로 나중에 장치의 구성이나 상태를 모니터링하는 데 사용할 수 있습니다. 예를 들어 인터페이스 상태가 원래 'UP'인 경우 'DOWN'이 됩니다. , 알림 이메일을 보내드립니다.
위는 Python 정규표현식[2]의 내용입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!