使用sed更新xml属性(Windows + cygwin和Linux)?

时间:2014-08-16 05:46:59

标签: xml linux windows sed

我需要使用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中都可以使用相同的命令。

任何人都可以帮我解决这个问题吗?任何指针都非常感谢!

谢谢!

2 个答案:

答案 0 :(得分:2)

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

以下命令应该完成工作:

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

答案 1 :(得分:2)

您也可以使用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