아래 예와 같이 Cisco 인터페이스 부분을 구문 분석하고 인터페이스가 다운(down)된 경우 제외하는 일부 또는 sed
정규식 이 있는지 궁금합니다 .grep
awk
예:
!
interface FastEthernet0/1
ip address 10.16.0.1 255.255.255.224
!
interface FastEthernet0/2
ip address 10.17.0.1 255.255.255.224
shutdown
!
sed
인터페이스 부분을 구문 분석하기 위해 다음 정규식을 사용합니다 .
sed -n -e '/^interface/,/^!/p' file.txt
그러나 위의 정규식은 모든 인터페이스를 구문 분석하고 인터페이스를 제외하지 않습니다.
답변1
앗
GNU awk 또는 mawk를 사용하면 다음과 같이 할 수 있습니다:
awk -v RS='!\n' '!/shutdown/'
산출:
interface FastEthernet0/1
ip address 10.16.0.1 255.255.255.224
세 번째 줄에서만 shutdown을 찾으면 더 정확하게 일치시킬 수 있습니다.
awk -v RS='!\n' -v FS='\n +' '$3 !~ /shutdown/'
sed
물론 sed를 사용할 수도 있지만 더 복잡합니다.
한 가지 접근 방식은 시작하는 방식이지만 인쇄하기 전에 예약된 공간에 전체 레코드를 수집합니다. 이는 GNU sed에서 작동합니다.
sed -n '/^interface/,/^!/ H; 1b; /^!/ { z; x; s/^\n//g; /shutdown/!p }'