【问题标题】:Update xml attribute using sed (Windows + cygwin and Linux)?使用 sed(Windows + cygwin 和 Linux)更新 xml 属性?
【发布时间】:2014-10-09 19:59:15
【问题描述】:

我需要使用 sed 命令对 xml 文件进行更新,但我遇到了这个问题。它需要在 Windows(使用 cygwin)和 Linux 上运行。

XML 包含以下元素:

...

<parameter name="jersey.test.host" value="localhost" />

...

我需要将值更新为任意值,例如“abc”。

我尝试了几个命令,例如:

sed -i "s#\(jersey.test.host\)\s*value="\(.*\)" />$#\1abc#" "C:\file.xml"

还有:

sed -i "s#<parameter name="jersey.test.host" value=".*" />#<parameter name="jersey.test.host" value="abc" />#"" "C:\file.xml"

但是当我运行命令时,文件并没有进行任何更改,我敢打赌,这意味着我没有正确匹配。

我不介意我是否也可以使用 awk 来做到这一点。任何可行的方法,只要在 Windows + Cygwin 和 Linux 中都可以使用相同的命令即可。

谁能帮我解决这个问题?任何指针都非常感谢!

谢谢!

【问题讨论】:

    标签: xml linux windows sed


    【解决方案1】:

    您也可以使用awk 来解决这个问题:

    awk -F\" '$2=="jersey.test.host" {$4="abc"}1' OFS=\" file
    <parameter name="jersey.test.host" value="abc" />
    

    要更新文件,请执行以下操作:

    awk -F\" '$2=="jersey.test.host" {$4="abc"}1' OFS=\" file > tmp && mv tmp file
    

    【讨论】:

      【解决方案2】:

      如果您的 sed 命令包含双引号,则应将其括在单引号中(或转义双引号)。

      以下命令应该可以完成工作:

      sed -i 's#<parameter name="jersey.test.host" value=".*" />#<parameter name="jersey.test.host" value="abc" />#' "C:\file.xml"
      

      【讨论】:

        猜你喜欢
        • 2021-10-23
        • 2015-06-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-09-23
        • 2018-12-25
        相关资源
        最近更新 更多