
아래와 같은 특정 속성을 사용하여 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가 없으면 접속이 불가능합니다