하위 태그가 있는 태그 사이의 콘텐츠 추출

하위 태그가 있는 태그 사이의 콘텐츠 추출

"xmlstarlet", "sed", "awk" 또는 이와 유사한 도구를 사용하여 파일에서 필요한 내용을 추출하십시오. 프로세스는 특정 비즈니스 프로세스의 전체 이름을 참조한 다음 해당 특정 비즈니스 프로세스 사이의 콘텐츠만 추출해야 합니다.

콘텐츠를 추출할 파일입니다.

 <businessProcesses>
        <fullName>Customer Support</fullName>
        <description>Use for Customer Support, TDG and Port</description>
        <isActive>true</isActive>
        <values>
            <fullName>Action Item</fullName>
            <default>false</default>
        </values>
        <values>
            <fullName>Solved</fullName>
            <default>false</default>
        </values>
    </businessProcesses>
    <businessProcesses>
        <fullName>Customer Support - Port</fullName>
        <description>Telecom team use only</description>
        <isActive>true</isActive>
        <values>
            <fullName>New</fullName>
            <default>true</default>
        </values>
        <values>
            <fullName>Open</fullName>
            <default>false</default>
        </values>
    </businessProcesses>
</CustomObject>    

원하는 출력.

<businessProcesses>
        <fullName>Customer Support - Port</fullName>
        <description>Telecom team use only</description>
        <isActive>true</isActive>
        <values>
            <fullName>New</fullName>
            <default>true</default>
        </values>
        <values>
            <fullName>Open</fullName>
            <default>false</default>
        </values>
    </businessProcesses> 

답변1

XML의 형식이 올바르다고 가정하면(예제에는 CustomObject여는 태그가 없습니다)

$ xmlstarlet sel -t -c '//businessProcesses[fullName="Customer Support - Port"]' -nl  file.xml
<businessProcesses>
        <fullName>Customer Support - Port</fullName>
        <description>Telecom team use only</description>
        <isActive>true</isActive>
        <values>
            <fullName>New</fullName>
            <default>true</default>
        </values>
        <values>
            <fullName>Open</fullName>
            <default>false</default>
        </values>
    </businessProcesses>

businessProcesses이는 하위 노드의 정확한 값을 가진 노드의 복사본을 추출하는 XPATH 쿼리와 함께 XMLStarlet을 사용합니다 .fullNameCustomer Support - Port

마지막으로 -nl출력에 개행 문자를 추가합니다.


XMLStarlet 또는 기타 구조화된 문서 형식 파서를 , 또는 와 같은 줄 기반 텍스트 조작 도구와 sed비교 하지 마십시오 awk.

답변2

원하는 출력을 얻을 수 있습니다 (추가 공백 포함)

awk 'NR==1 || (NR >= 15 && NR <= 26)'

또는

sed -n '1p; 15,26p'

더 나은 답변을 원한다면 더 나은 질문을 하세요.

관련 정보