如何在Mac上使用脚本更改XML属性的特定值

时间:2011-12-15 04:07:04

标签: xml sed awk

我的任务是编写一个脚本来更改大约1000台Mac上的XML文件中的特定值。显然,这需要编写脚本,并且最好仅使用Mac上已有的工具(即不需要额外的安装)。这里的最终目标是在与活动目录相关的特定文件中禁用IPv6。例如:

旧文件:

<IPv4>
    <script>Automatic</script>
</IPv4>

<IPv6>
    <script>Automatic</script>
</IPv6>

新文件:

<IPv4>
    <script>Automatic</script>
</IPv4>

<IPv6>
    <script>__INACTIVE__</script>
</IPv6>

我已经尝试过搜索并有一些sed脚本让我在那里,但没有足够接近。我无法安装任何XML解析程序,因为这需要在所有Mac上尽可能自动化。

编辑:次要问题 -

使用awk或sed,我可以计算它进行更改的次数,即计算它找到的实例数吗?

1 个答案:

答案 0 :(得分:3)

使用awk

awk '/<IPv6>/,/<\/IPv6>/ {sub(/Automatic/,"__INACTIVE__")}1' xml_file > new_xml_file

使用sed:在线修改

sed -i '/<IPv6>/,/<\/IPv6>/s/Automatic/__INACTIVE__/' xml_file

要在混音中添加点数:

awk '
/<IPv6>/,/<\/IPv6>/ {sub(/Automatic/,"__INACTIVE__"); if ($0~/__/) count++}1 
END{ print FILENAME, count >>"countfile"}' xml_file> new_xml_file

END语句将捕获您运行脚本的Filename以及名为counts的文件中的countfile更改,并将appending保留为{{1}}它用于统计分析。