XML 파일에서 특정 문자열을 찾아 다른 파일에 저장

XML 파일에서 특정 문자열을 찾아 다른 파일에 저장

입력 파일의 텍스트는 다음과 같습니다.

<title>
    <band height="21"  isSplitAllowed="true" >
        <staticText>
            <reportElement
                x="1"
                y="1"
                width="313"
                height="20"
                key="staticText-1"/>
                <box></box>
                <textElement>
                    <font fontName="Arial" pdfFontName="Helvetica-Bold" size="14" isBold="true" isUnderline="true"/>
                </textElement>
                <text><![CDATA[4) Computation of Tier I and Tier II Capital :]]></text>
        </staticText>
    </band>
</title>

출력 파일에는 다음이 있어야 합니다.

4) Computation of Tier I and Tier II Capital :

파일에 태그가 많이 <title>있습니다 [CDATA]. 하지만 라벨 아래의 텍스트를 복사 <title>하고 <CDATA>그 출력을 다른 파일에 저장하고 싶습니다.

답변1

**여기서 강조 표시하기 위해 섹션 에 시퀀스 쌍을 추가하려는 것 같습니다 CDATA. 불행하게도 이는 잘못된 XML로 바뀌었습니다. 이런 뜻이라고 가정하면,

<text><![CDATA[4) Computation of Tier I and Tier II Capital :]]></text>

XML 파서를 사용하여 XML을 구문 분석할 수 있습니다.

xmlstarlet sel -T -t -v '//text' -n x.xml
4) Computation of Tier I and Tier II Capital :

<text/>"요소의 내용"보다 더 엄격한 제약 조건이 있는 경우 XPath 필터를 적절하게 조정할 수 있습니다. 예를 들어:

xmlstarlet sel -T -t -v '/title/band/staticText/text' -n x.xml
4) Computation of Tier I and Tier II Capital :

답변2

이와 같이?

$ sed -n '/<title>/,/<\/title>/p' input.txt | grep -oP '(?<=\[CDATA\[).*(?=\])'
  • sed과 (이 라벨 포함) <title>사이의 모든 내용을 인쇄합니다 . 해당 지역에 항상 있는 </title>경우 이 단계를 생략할 수 있습니다.[CDATA
  • grep[CDATA[그 전후의 모든 것을 인쇄합니다]

관련 정보