我需要使用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中都可以使用相同的命令。
任何人都可以帮我解决这个问题吗?任何指针都非常感谢!
谢谢!
答案 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