如何在shell脚本中使用新值(添加日期时间)更新xml文件属性?

时间:2017-05-22 11:13:16

标签: xml bash shell awk sed

这是我的xml

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

我希望o使用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

3 个答案:

答案 0 :(得分:2)

与经理和客户一起努力是一个永恒的过程...我理解。
对于你这个简单的案例,你可以使用 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) - 获取当前日期时间值

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

答案 1 :(得分:1)

尝试:

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

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

答案 2 :(得分:0)

sudo sed -i '/<Project\s\description=""/s/name="[^"]*/name="'"$(date)"'"/g' Demo.xml