xml - 使用 Unix 命令行删除 XML 节点

标签 xml linux awk sed grep

如果节点没有特定标签,我需要从文件中删除它们。 如何使用 awk、sed 或 grep 只保留具有名称标签的节点?

输入:

    <node user="user1">
      <tag k="name" v="name1"/>
    </node>
    <node user="user2">
      <tag k="network" v="nw1"/>
    </node>

期望的输出:

    <node user="user1">
      <tag k="name" v="name1"/>
    </node>

最佳答案

如果您的文件真的那么简单,使用 GNU awk 处理多字符 RS:

$ awk -v RS='</node>\n' '/v="name1"/{printf "%s%s", $0, RT}' file
    <node user="user1">
      <tag k="name" v="name1"/>
    </node>

关于xml - 使用 Unix 命令行删除 XML 节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40828185/

相关文章:

linux - 使用来自另一个目录的相对路径运行脚本

linux - 如何在 Makefile 中隐藏编译信息?

regex - BASH:如果行匹配 - 删除行 + 接下来的 33 行

linux - 我正在尝试使用 awk 旋转文件

java - Spring MVC 非法状态异常将初始化 Web 应用程序上下文

php - XML 输出 - PHP、JS 与其他什么?

python - 由于 pip3.2 错误,软件包安装失败

如果 ping 服务器关闭,Linux 命令在服务器上生成文件,如果服务器启动,则生成不同的文件

xml - Emacs 制表符宽度 XML

javascript - 如何在javascript中解析带有 `find`的xml属性?