在 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[和之后的所有内容]

相关内容