SNMP에서 특정 데이터 추출


0

라우터에서 다른 라이센스를 얻기 위해 SNMP 폴링을 완료했습니다. 정보를 성공적으로 폴링했습니다. 나는 지금 그것을 제시 할 수 있기를 원합니다. 내가 가진 출력의 스냅 샷은 다음과 같습니다.

SNMPv2-SMI::enterprises.9.9.543.1.2.3.1.3.1.1.1 = STRING: "ipbasek9"  
SNMPv2-SMI::enterprises.9.9.543.1.2.3.1.3.1.1.2 = STRING: "securityk9"  
SNMPv2-SMI::enterprises.9.9.543.1.2.3.1.3.1.2.1 = STRING: "securityk9"  
SNMPv2-SMI::enterprises.9.9.543.1.2.3.1.3.1.2.2 = STRING: "uck9"

나는 단지 반전 된 쉼표에있는 것을 보여주고 싶다 :

  • "ipbasek9"
  • "securityk9"
  • 기타

"(. *?)"에 대한 정규식을 찾았습니다. 반전 된 쉼표의 모든 데이터를 강조 표시하지만 실제로 텍스트에서 데이터를 가져 오는 명령은 무엇입니까? 나는 모든 종류의 awk, sed, grep을 시도했지만 여전히 운이 없습니다.


어리석은 소리라고 부르지 만 출력에 "반대 쉼표"가 표시되지 않습니다.
maulinglawns

- 나는 "거꾸로 쉼표"따옴표 나 큰 따옴표, @maulinglawns에 대한 또 다른 용어입니다 생각 en.m.wiktionary.org/wiki/inverted_comma
제프 쉘러

답변:


1

해결책 1

grep해당 옵션이 내장되어 있으며 때로는 직접 사용합니다.
보낸 사람 man grep:

       -o, --only-matching
          Print only the matched (non-empty) parts of a matching line, with each  such  part  on  a  separate
          output line.

그런 다음 tr원치 않는 문자를 제거 하는 데 사용할 수 있습니다 .

$ tr -d '"'

테스트 문자열 :

$ echo 'SMI::enterprises.9.9.543.1.2.3.1.3.1.1.2 = STRING: "securityk9"' | grep -E -o '"(.*?)"' | tr -d '"'

산출:

securityk9

해결책 2

또 다른 방법은 공간으로 구분 된 필드 수가 일치하면 cut(및 tr, 여전히 2 개의 파이프를 사용하고 한 번의 실행으로 수행 할 수 있다고 확신합니다) 사용할 수 있습니다.

$ cut -d ' ' -f 4 | tr -d '"'

테스트:

$ echo 'SMI::enterprises.9.9.543.1.2.3.1.3.1.1.2 = STRING: "securityk9"' | cut -d ' ' -f 4 | tr -d '"'
securityk9

해결책 3

perlPerl 5가 설치된 모든 Linux 및 Unix 시스템에서 사용 이 가장 보편적이며 휴대 가능해야합니다. 출력을 다음으로 파이프하십시오.

perl -p -e 's/.*?"(\w+)"/$1/g' -

예:

$ echo 'SNMPv2-SMI::enterprises.9.9.543.1.2.3.1.3.1.1.1 = STRING: "ipbasek9"' | perl -p -e 's/.*?"(\w+)"/$1/g' -
ipbasek9

설명:

-p           iterate over each line of input
-e           execute following code
s/foo/bar/g  substitute 'foo' with 'bar' globally, in entire line
.*?"         match any characters non-greedy, so up to first left-most double quote "
(\w+)        match and capture into $1 any word-characters (alphanumeric, underscore _, plus connector punctuation chars)
$1           substitute with with whatever was captured in first parenthesis 

답변 주셔서 감사합니다. Solaris 에서이 작업을 수행하고 grep : illegal option-E grep : illegal option-o 사용법 : grep -hblcnsviw 패턴 파일 오류가 발생합니다. . .
Paul Davies

@PaulDavies 아, 나는 유닉스를 모른다. (아직!) 방법 2 제안 된 솔루션을 사용하는 방법에 대한 cuttr? 작동합니까?
yahol

@PaulDavies 내가 추가 한 세 번째 솔루션을 확인하십시오. 그것이 당신을 위해 작동하기를 바랍니다!
yahol

두 번째 해결책이 효과가있었습니다! 도와 주셔서 감사합니다. 네 번째 블록마다 그것을 꺼내었다. cut -d ''-f 4, 8, 12,16 ... 40 내일 출력 표시
Paul Davies

@PaulDavies 질문을 편집하는 동안 snmp 출력에 새로운 줄을 추가하는 끔찍한 가정을 만들었습니다! 각 장치 출력이 별도의 줄에없는 이유는 무엇입니까? 그렇게하면 구문 분석이 훨씬 쉬워집니다. 내가 일반적으로하는 일은 : for SWITCH in 10.10.10.{10..30}; do echo "$SWITCH"; snmpwalk -v1 -c switchback "$SWITCH" sysdesc | cut -d ' ' -f 4-9; echo; done-이렇게하면 각 장치의 회신이 별도의 줄에 있습니다 (선택적 에코 스위치 IP와 더 나은 가독성을 위해 빈 줄 사이).
yahol
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.