>

내 질문은 bash 스크립트에서 노드 값을 얻기 위해 XML을 구문 분석합니까? 또한 회사 정책에 따라 새로운 XML 파서를 설치/사용할 수 없습니다. shell/perl/awk/sed

를 사용하여이 작업을 수행해야합니다.

내 질문을 바꾸려고합니다 :

1) 텍스트 데이터가 많고 그 사이에 일부 XML 데이터가 게시 된 process.log 파일이 있습니다.
2) 다른 텍스트 데이터와 함께 수천 개의 서로 다른 XML이 로그에 게시되었습니다.
3) 이제발신 XML :value
이후에 게시 된 XML 파일 만 선택해야합니다. 4) 또한 선택하여 새 파일로 복사해야하는 XML 파일은ALERTID 태그의 값과 일치하는 파일이어야합니다.
5) 스크립트 입력에 ALERTID 값이 제공됩니다. 따라서이 경우mGMjhgHgffHhhFdH1u4가 입력으로 제공되며이 경고에 대해 게시 된 전체 XML 파일을 선택해야합니다. 시작 태그는 시작 태그이고 종료 태그는
5) 따라서 특정 ALERTID를 기반으로 새 파일에서 관련 발신 XML 파일을 선택해야 다른 환경에서 재생할 수 있습니다.

와이즈 비즈

Format of the log:

이제 요구 사항은 입력에서 AlertID를 가져 와서 프로세스 로그를 스캔하고 별도의 파일에서 일치하는 발신 XML을 추출하는 것입니다.

awk를 사용하여 나가는 모든 XML 파일을 추출 할 수 있지만 특정 AlertID와 관련된 파일을 추출하는 방법을 잘 모르겠습니다.

예 :

Info Jan 11 17:30:26.12122 The process is not responding to heartbeats
Debug Jan 11 17:30:26.12123  Incoming XML :<xml version "1.0" encoding ="UTF-8"?>
<Alert trigger = "true" >
<Alerttype>orderReject</Alerttype>
<AlertID>ghghfsjUtYuu78T1</AlertID>
<Order>uusingas</Order>
<Quantity>1254</Quanity>
</Alert> (CreateInitEventHandler. C:356)
Debug Jan 11 17:30:26.12199 The process is going down with warnings
Debug Jan 11 17:30:26.148199 Outgoing XML: <xml version "1.0" encoding ="UTF-8"?>
<Alert trigger = "true" >
<Alerttype>orderheld</Alerttype>
<AlertID>mGMjhgHgffHhhFdH1u4</AlertID>
<Order>uwiofhdf</Order>
<Quantity>7651</Quanity>
</Alert>(CreateEventHandler. C:723)
Debug Jan 11 17:30:26.13214 The process has restarted and thread opened
Debug Jan 11 17:30:26.13215 The heartbeat is recieved from alertlistener process

awk '/Outgoing/{p=1; s=$0} P & & /<\/Alert>/ {print $0 FS s; s="" ;p=0}p' 1.log>2.log
  • 답변 # 1

    작업에 특히 적합하지 않지만 작동해야하는방법 중 하나는 다음과 같습니다.

    모든 것이 한 줄에 표시되도록 LF 제거

    하지만 </Alert> 후 LF를 배치  모든 XML이 자신의 행에 있도록

    grep  원하는 코드를 위해

    라인을 출력하고 정리

    이것은 다음으로 번역됩니다 :

    tr -d "\r\n" < log_file \
     | sed -e 's/\<?xml/\n&/g' -e 's/\<\/Alert>/&\n/g' \
     | grep -F '<AlertID>mGMjhgHgffHhhFdH1u4</AlertID>'
    
    

    결과를 ​​ xmllint --format - 로 파이프 할 수도 있습니다.  예쁘게 인쇄합니다.

관련 자료

  • 이전 ubuntu - 파이썬 경로를 설정하는 방법?
  • 다음 debian - 머신이 부팅 될 때 Noip2를 자동으로 실행 하시겠습니까?