sed를 사용하여 텍스트 파일에서 임의의 XML을 추출합니다.

sed를 사용하여 텍스트 파일에서 임의의 XML을 추출합니다.

여러 요청 XML 조각이 포함된 로그 파일이 있습니다. 이 sed 명령을 사용하여 요청 XML을 추출하고 인쇄합니다.

sed -n '/<GetCompensableProductIdentification*/,/<\/GetCompensableProductIdentification>/p' ProductIdentifierService.log

원하는 요청을 필터링할 수 있도록 요청 시작 및 종료 태그에 변수를 사용하고 싶습니다. 어떻게 해야 하나요?

답변1

이것은 당신에게 도움이 될 수 있습니다.

 sed -n 's,.*<GetCompensableProductIdentification>\(.*\)</GetCompensableProductIdentification>.*,\1,p' input

xmlstarlet하지만 이 상황에서는 유효한 도구인 것 같아요 .

 xmlstarlet sel -t -v '//GetCompensableProductIdentification' -n

답변2

이 스크립트

sed -n '/<GetCompensableProductIdentification>/,/<\/GetCompensableProductIdentification>/p' ProductIdentifierService.log

이렇게 해야 해

여기 옵션은 -n 일반 출력을 억제합니다. 따라서 선택한 내용만 인쇄됩니다.


변수를 사용하려면 다음을 사용할 수 있습니다.[쉘 매개변수 대체].

start_tag="<GetCompensableProductIdentification>"
end_tag="${start_tag/#</<\\/}"
sed -n "/${start_tag}/,/${end_tag}/p" ProductIdentifierService.log

이것은 당신이 스크립트를 작성하도록 유혹할 것입니다

# Script name - xmlparser.sh
#!/usr/bin/env bash
start_tag="$1"
end_tag="${start_tag/#</<\\/}"
if [ -e "$2" ] # Extra check if file exists
then
   sed -n "/${start_tag}/,/${end_tag}/p" "$2"
else
   echo " The file : $2 doesn't exists"
fi

다음과 같이 스크립트를 실행하세요.

./xmlparser.sh "<GetCompensableProductIdentification>"  "/path/to/log/file"

관련 정보