gpt4 book ai didi

xml - 用 awk 或 sed 替换 xml 文件的一部分

转载 作者:行者123 更新时间:2023-12-04 18:38:21 24 4
gpt4 key购买 nike

我想在 <restApi> 之间替换下面的部分和 </restApi> (包括 restApi 标签)与另一个字符串:

...
<restApi>
<baseUrl>https://domain.com/nexus</baseUrl>
<forceBaseUrl>true</forceBaseUrl>
<uiTimeout>60000</uiTimeout>
</restApi>
...

使用 awk,我使用以下命令进行替换:

awk '/<restApi>/,/<\/restApi>/ {sub(/.*/,"<sometag>stuff</sometag>")}1' file.xml

问题是 awk 用替换字符串替换了每一行,所以我得到了这个输出:

...
<sometag>stuff</sometag>
<sometag>stuff</sometag>
<sometag>stuff</sometag>
<sometag>stuff</sometag>
<sometag>stuff</sometag>
...
  • 我在 awk 命令中缺少什么只有一个 "<sometag>stuff</sometag>"结果呢?
  • 如何改用 sed 来做到这一点?
  • 间距/制表符在替换过程中丢失。我该如何保存它?

最佳答案

正如我在上面的评论中所指出的,使用 XML 感知工具。

XSLT 是其中之一,所以这里有一个简单的样式表来替换 <restApi>元素,同时保留其他所有内容,包括空格和制表符。

<!-- newRestApi.xsl -->
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="node() | @*">
<xsl:copy>
<xsl:apply-templates select="node() | @*" />
</xsl:copy>
</xsl:template>

<xsl:template match="restApi">
<sometag>stuff</sometag>
</xsl:template>
</xsl:stylesheet>

xsltproc 一起使用非常简单:

xsltproc newRestApi.xsl input.xml > output.html

关于xml - 用 awk 或 sed 替换 xml 文件的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21163691/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com