捕获包含搜索模式的整个XML标签

问题描述 投票:0回答:1

我需要捕获一个包含特定模式的XML标记,以便将其复制到另一个文件中。复杂的是,标签会重复多次并且内部的行数会有所不同。

输入:

<MainTag>
    <Tag1>text</Tag1>
    <Tag2>text</Tag2>
   <Info>SearchPattern</Info>
    <Tag3>text</Tag3>
    .....
</MainTag>
<MainTag>
    <Tag1>text</Tag1>
    <Tag2>text</Tag2>
   <Info>SearchPattern</Info>
    <Tag3>text</Tag3>
    .....
</MainTag>
<MainTag>
..........
</MainTag>

输出:

<MainTag>
    <Tag1>text</Tag1>
    <Tag2>text</Tag2>
   <Info>SearchPattern</Info>
    <Tag3>text</Tag3>
    .....
</MainTag>

无法使用pcregrep

我尝试使用grep -Pzo '(?s)<MainTag.+?Searchpattern.+?</MainTag>',但它从Main标记的第一次出现中捕获了文本。

xml bash grep text-processing
1个回答
0
投票

就像Sundeep一样,请使用xml感知工具来处理xml,例如Xidel

Xidel是一个命令行工具,可使用CSS,XPath 3.0,XQuery 3.0,JSONiq或模式模板从HTML / XML页面以及JSON-API下载和提取数据。它还可以创建新的或转换后的XML / HTML / JSON文档。

xidel -s input.xml -e '//MainTag ! file:write(concat("output",position(),".xml"),outer-xml())'

对于每个“ MainTag”节点,file will be created(在这种情况下为output1.xmloutput2.xml,带有outer-xml

另请参见this xidelcgi demo

© www.soinside.com 2019 - 2024. All rights reserved.