【问题标题】:How can I replace text only inside of a specific xml block using sed?如何使用 sed 仅替换特定 xml 块内的文本?
【发布时间】:2021-02-17 20:15:04
【问题描述】:

在一个 XML 文件的每个 XML 块中有多个端口配置。

下面的示例有两个端口配置。一个在<Server>,另一个在<Connector>

我只想更改 <Connector> 块中的端口。

在这种情况下,如何使用sed 命令解决这个问题?

(我需要一个只使用sed 命令的解决方案,因为它应该在任何unix env 上运行。)

(我想指定特定的块作为名称。更改第n个块以匹配port文本的方法不适用。因为文件中有更多port配置作为注释。)

服务器.xml

<?xml version='1.0' encoding='UTF-8'?>
<Server port="8005" shutdown="SHUTDOWN">
  <Service name="Catalina">
    <Connector port="80" protocol="HTTP/1.1"/>
    <Engine name="Catalina" defaultHost="localhost">
      <Host name="localhost" appBase="webapps"/>
    </Engine>
  </Service>
</Server>

【问题讨论】:

  • Don't Parse XML/HTML With Regex. 我建议使用 XML/HTML 解析器 (xmlstarlet, xmllint ...)。
  • @Cyrus 这是合理的。我会找到使用python的方法。非常感谢。

标签: xml unix sed command-line


【解决方案1】:

替换 xml 文件中的字符串根本不安全。您可以破坏语法、xml 结构,并且不允许像在选择器之前/之后编辑节点上的属性等巧妙操作......

正如@Cyrus 建议的那样:使用 xml 解析器。不管是unix环境。随意制作 python 或 java 脚本或您喜欢的语言。

【讨论】:

    猜你喜欢
    • 2021-08-19
    • 2012-10-14
    • 2012-01-11
    • 2021-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-07
    相关资源
    最近更新 更多