【问题标题】:How to change specific value of XML attribute using scripting on Mac如何在 Mac 上使用脚本更改 XML 属性的特定值
【发布时间】:2012-01-20 20:20:31
【问题描述】:

我的任务是编写一个脚本来更改大约 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,我可以计算它进行更改的次数,即计算它找到的实例数吗?

【问题讨论】:

  • 我更新的答案是否解决了您的第二个问题?

标签: xml sed awk


【解决方案1】:

使用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 和名为 countfile 的文件中更改的 counts,并将保留 appending 以供您进行统计分析。

【讨论】:

  • 哇!这是一个快速的反应,就像一个魅力!谢谢。
  • 不客气。我添加了一个备用sed 解决方案。如果解决方案对您有效,请随时投票并接受答案。 :) 祝你好运!
  • 我是 SO 新手,但在 SF 上已经有一段时间了。我忘了这会让你等待接受答案。
  • 感谢您添加使用 sed 的示例。我发誓我已经尝试过几乎完全一样的东西,但没有奏效。再想一想,我认为我的单引号放错了位置。
  • 是的,quotes 的丢失或位置不正确可能会导致数小时的挫败感。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-01
  • 2023-03-18
  • 2020-08-10
  • 2021-10-31
  • 2011-08-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多