두 문자열 사이의 값 추출

두 문자열 사이의 값 추출

오른쪽 사이의 값을 추출하고 싶습니다.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><HorizonResponse><assignedDevices><assignedDevice><deviceType>EOS</deviceType><assignedProduct><installDate>2019-09-19T00:00:00+02:00</installDate><entitlements>600000001,600000080</entitlements><serviceIDs></serviceIDs>2019-09-19T00:00:00+02:00</installDate><deInstallDate>1753-01-01T00:00:00+01:00</deInstallDate><casIndicator>14</optionQuantity><entitlements>600000300</entitlements><serviceIDs><assignedOption>
      ...

답변1

XML 문서의 형식이 올바르다고 가정하면(현재 5개의 닫는 태그가 누락됨) 이를 사용하여 xmlstarlet다음과 같이 문서에 있는 모든 노드의 값을 검색할 수 있습니다.entitlements

$ xmlstarlet sel -t -v '//entitlements' -nl file.xml
600000001,600000080
600000300

특정과 관련된 값을 얻으려면 optionID:

$ xmlstarlet sel -t -v '//assignedOption[optionID=1000929]/entitlements' -nl file.xml
600000300

답변2

우아함이 부족 xmlstarlet하지만 이 perl접근 방식은 필요한 출력을 반환합니다.

$ perl -ne 'while(m/<entitlements>(.*?)<\/entitlements>/g){print $1," "}' file.xml
600000001,600000080 600000300

awk방법

$ awk -F\< '{for(a=1;a++<NF;){if($a~/^entitlements>/){print substr($a,14)}}}' file.xml
600000001,600000080
600000300

grep방법

$ grep -o '<entitlements>[0-9,]*' file.xml|grep -o '[0-9,]*'
600000001,600000080
600000300

관련 정보