Cisco 인터페이스에 대한 정규식 awk

Cisco 인터페이스에 대한 정규식 awk

아래와 같은 특정 속성을 사용하여 Cisco 인터페이스 부분을 구문 분석하는 Sed/Grep 또는 Awk 정규식이 있는지 궁금합니다.

.txt 파일의 내용

!
interface FastEthernet0/1
 no ip unreachables
!
interface FastEthernet0/2
 no ip proxy-arp
!

스크립트:

#!/bin/bash
VALUE="no ip proxy-arp"
awk -v RS='!\n' -v PATTERN=${VALUE} '/$PATTERN/' file.txt | awk '/^interface/';
exit 0

문제는 쉘에서 직접 line을 실행하면 작동하지만 스크립트에서 실행하면 작동하지 않는다는 것입니다.

실행해 보니 변수 값을 바꿀 수 없는 bash -x것을 알 수 있습니다 .awk

어떤 제안이 있으십니까?

답변1

이것이 쉘에서 작동한다고 믿기 어렵습니다. 그럼에도 불구하고 이 코드에는 몇 가지 오류가 포함되어 있으며 IMHO의 접근 방식이 잘못되었습니다.

//awk는 변수가 아닌 문자열을 기대합니다 . 이는 상수 정규 표현식입니다. 따라서 쉘이 변수를 거기에 넣도록 하거나 ~.

해결 방법:

awk -v RS='!\n' -v PATTERN="${VALUE}" '$0 ~ PATTERN' file.txt | 
  awk '/^interface/'

나는 이것이 효과가 있다는 것에 놀랐다. 문서에서 RS 설정으로 인해 원하지 않는 "!"가 인쇄될 것으로 예상했습니다. 그러나 나는 이것이 더 낫다고 생각합니다.

awk -v PATTERN="${VALUE}" \
  '$0 ~ PATTERN { print previousline; }; { previousline=$0; }' file.txt

또는 하드코드 모드 사용

awk '/no ip proxy-arp/ { print previousline; }; { previousline=$0; }' file.txt

또는 쉘을 사용하여 패턴을 작성하십시오.

awk /"$VALUE"/' { print previousline; }; { previousline=$0; }' file.txt

답변2

에코"!
인터페이스 FastEthernet0/1
 IP가 없으면 접속이 불가능합니다
!
인터페이스 FastEthernet0/2
 IP 프록시 arp 없음
" | pcregrep -M "^Interface.*0/1\n (.*\n)!"

결과:

인터페이스 FastEthernet0/1
 IP가 없으면 접속이 불가능합니다

관련 정보