从脚本编辑xml

时间:2016-11-15 20:12:49

标签: xml linux bash shell

我需要在 ec2-instance 中运行一个用户数据脚本来更改文件夹中的XML。

我在 ec2

的路径中有一个像这样的XML
<Root>
    <Properties>
       <Property>
          <Name>myProp</Name>
          <Value>old_value</Value>
       </Property>
       <Property>
          <Name>anotherProp</Name>
          <Value>other_value</Value>
       </Property>
    </Propierties>
</Root>

我想将 old_value 更改为 new_value 。但只是那个,而不是 other_value

我该怎么做?

我已经尝试了 powershell 脚本,但我不知道如何运行它来测试它:

#!/bin/bash
$path = '/home/wowza/conf/Server.xml'

$new_value = 'new_value'

$xml = [xml](Get-Content $path)

$xml.Data.Course.Subject

$property = $xml.Root.Server.Properties.Property | where {$_.Name -eq 'myProp'}
$property.Value = $new_value

$xml.Save($path)

如果你给我发了一个脚本,请不要忘记包括如何运行它来测试它,#的解释器!行和要安装的东西。 谢谢!

2 个答案:

答案 0 :(得分:2)

使用GNU sed:

sed -i '/<Name>myProp<\/Name>/,/<Value>old_value<\/Value>/s/old_value/new_value/' file.xml

输出到文件file.xml:

<Root>
    <Properties>
       <Property>
          <Name>myProp</Name>
          <Value>new_value</Value>
       </Property>
       <Property>
          <Name>anotherProp</Name>
          <Value>other_value</Value>
       </Property>
    </Propierties>
</Root>

答案 1 :(得分:1)

即使您不知道old_value是什么,下面的代码也允许您为目标字段设置new_value: #!/斌/庆典 sed -i'e'/<Name>myProp<\/Name>/,/<Value>/s/^\s*<Value>.*$/<Value>new_value<\/Value>/ '/ folder / xml-file 这里唯一需要注意的是脚本会从要更改的行中删除空格缩进,但这只是一个不会影响代码结果的视觉效果;如果这对您很重要,您可以使用另一个sed命令添加之后需要的缩进空格。