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

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

다음과 같은 특정 속성을 사용하여 Cisco 인터페이스 섹션을 구문 분석하기 위한 Sed/Grep 또는 Awk 정규식이 있는지 알고 싶습니다.

file.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

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

으로 실행해보면 변수 값을 대체할 수 없다는 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 "^인터페이스 .*0/1\n (.*\n)!"

결과:

인터페이스 FastEthernet0/1
 연결할 수 없는 IP 없음

관련 정보