"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을 사용합니다 .fullName
Customer Support - Port
마지막으로 -nl
출력에 개행 문자를 추가합니다.
XMLStarlet 또는 기타 구조화된 문서 형식 파서를 , 또는 와 같은 줄 기반 텍스트 조작 도구와 sed
비교 하지 마십시오 awk
.
답변2
원하는 출력을 얻을 수 있습니다 (추가 공백 포함)
awk 'NR==1 || (NR >= 15 && NR <= 26)'
또는
sed -n '1p; 15,26p'
더 나은 답변을 원한다면 더 나은 질문을 하세요.