【问题标题】:how to update xml file attribute with new value (add date time) in shell script?如何在 shell 脚本中使用新值(添加日期时间)更新 xml 文件属性?
【发布时间】:2017-10-22 00:38:16
【问题描述】:

这是我下面的xml

<Deployer exitOnError="true" sourceType="Repository">
<Projects projectPrefix="">
<SubProject description="" name="Ship" overwrite="false" type="Repository">
</SubProject>
</Projects>
</Deployer>

我想使用 shell 脚本将 name="Ship" 更改为 name="Ship"+currentdatetime。任何帮助表示赞赏。

我想最好使用 sed 或 awk(我不想要 xmlstarlet,因为我的 linux 机器上不能有 xml 工具箱)

请在下面找到,我试过了。

sed "/DeployerSpec>/,<Project description='' name='bstar' overwrite='false' type='Repository'>" file

sed -i 's:<DeployerSpec exitOnError="true" sourceType="Repository"><Projects projectPrefix=""><Project description="" name="bstar" overwrite="false" type="Repository"></Project></Projects></DeployerSpec>:<DeployerSpec exitOnError="true" sourceType="Repository"><Projects projectPrefix=""><Project description="" name="bstar"+$(date+%x_%r) overwrite="false" type="Repository"></Project></Projects></DeployerSpec>:' sample.xml

sed -i.bak "s/<Project description='' name='bstar' overwrite='false' type='Repository'>/<Project description='' name='bstar'+$(date +%x_%r) overwrite='false' type='Repository'>/g" a.xml

【问题讨论】:

  • 我的 linux 上不能有 xml 工具箱 - 但您可以轻松安装它们,因为它们是用于 xml 数据操作的合适工具
  • 我的客户不同意,我的经理坚持只用 shell 脚本来解决这个问题!
  • my manager insists on fixing this with shell scripting alone 然后写一个问你有没有卡住...
  • edit 你的问题包括预期的输出给定您发布的示例输入以及您迄今为止尝试过的内容。
  • 包括了我尝试过的脚本。

标签: xml bash shell awk sed


【解决方案1】:

与经理和客户的斗争是一个永恒的过程......我理解。
对于您的简单情况,您可以使用 sed 方法:

sed -i 's/name="Ship"/name="'"$(date)"'"/g' your.xml

xml 文件内容(您的语言环境将有不同的日期时间):

<Deployer exitOnError="true" sourceType="Repository">
<Projects projectPrefix="">
<SubProject description="" name="Mon 22 May 15:41:23 EEST 2017" overwrite="false" type="Repository">
</SubProject>
</Projects>
</Deployer>

  • -i - 就地修改文件

  • $(date) - 获取当前日期时间值


无论如何,如果会有更复杂和复杂的任务,例如“更改属性name 值,如果它是父元素ServiceProject 的子元素,并且该父元素还应该有一个子元素city 属性balance大于1000"。 Unix shell 工具在这种情况下会失败,你的经理需要重新考虑他们对 XML 解析器的态度

【讨论】:

    【解决方案2】:

    尝试:

    DATE=$(date)
    sed 's/Ship/& '"${DATE}"'/g' Input_file
    

    创建一个名为 DATE 的具有当前日期的变量,然后简单地使用 sed 将字符串 Ship 替换为 Ship 和当前日期。

    【讨论】:

      【解决方案3】:
      sudo sed -i '/<Project\s\description=""/s/name="[^"]*/name="'"$(date)"'"/g' Demo.xml
      

      【讨论】:

      • 感谢您提供此代码 sn-p,它可能会提供一些即时帮助。一个正确的解释would greatly improve 其教育价值通过展示为什么这是一个很好的解决问题的方法,并将使它对未来有类似但不相同的问题的读者更有用。请edit您的答案添加解释,并说明适用的限制和假设。并在建议使用sudo之前修复错误!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-17
      • 2018-12-31
      相关资源
      最近更新 更多