You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Shell核心命令筛选含指定age的XML client标签

筛选XML中age等于18的client标签

我有如下XML文件:

<clients>
    <client>
        <name>Bob</name>
        <age>18</age>
    </client>
    <client>
        <name>Alice</name>
        <age>12</age>
    </client>
    <client>
        <name>Carlos</name>
        <age>28</age>
    </client>
</clients>

需要仅筛选出age等于18的client标签。我先用以下命令获取所有client标签:

sed -n '/client>/,/<\/client/p' test.xml

执行结果返回了全部三个client节点:

<client>
        <name>Bob</name>
        <age>18</age>
    </client>
    <client>
        <name>Alice</name>
        <age>12</age>
    </client>
    <client>
        <name>Carlos</name>
        <age>28</age>
    </client>

尝试了以下命令但未达到预期效果:

sed -n '/client>(\<age>18<\/age>)/<\/client/p' test.xml

由于无法下载外部工具,只能使用Shell核心命令,期望得到的结果是:

<client>
        <name>Bob</name>
        <age>18</age>
    </client>

解决方案

使用sed的暂存空间处理多行区块,命令如下:

sed -n '/<client>/,/<\/client>/{H;/<\/client>/{x;/<age>18<\/age>/p;x}}' test.xml

命令说明:

  • /<client>/,/<\/client>/:定位每个client节点的完整内容区块
  • H:将当前行内容追加到暂存空间,逐步保存整个client区块
  • 当匹配到</client>时:
    • x:交换暂存空间和模式空间,此时模式空间中是完整的client区块内容
    • /<age>18<\/age>/p:如果区块包含<age>18</age>,则打印该区块
    • x:交换回暂存空间和模式空间,保证后续处理不受影响

执行该命令后即可得到目标结果。

内容的提问来源于stack exchange,提问作者culpinha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 09:40:32