여러 요청 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"