用于获取第二行xml文件并使用fetched name重命名该文件的命令

时间:2015-10-09 11:01:41

标签: xml bash command-line

我有一个xml文件名media.xml,它包含:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<table name="advisoryTable"/>
  <row>
      <field name="book">maths</field>
      <field name="book">science</field>
      <field name="book">eng</field>
  </row>
</table>

有什么方法可以从xml文件中获取"advisory table"名称,并将我的文件从media.xml重命名为advisory.xml

提前谢谢

1 个答案:

答案 0 :(得分:0)

我希望您的<table>元素实际上不是自动关闭的,因此您的XML是有效的。如果是这样,您可以使用name等工具提取xmllint属性的值:

xmllint --xpath 'string(/table/@name)' media.xml

此命令的输出为advisoryTable。您可以将输出传递给sed以删除Table部分:

xmllint --xpath 'string(/table/@name)' media.xml | sed 's/Table//'

如果您对结果感到满意,可以在命令替换中使用它来重命名您的文件:

mv media.xml "$(xmllint --xpath 'string(/table/@name)' media.xml | sed 's/Table//')"

我不愿意鼓励以这种方式自动重命名文件,因为你冒着意外覆盖某些东西的风险。也许最好复制文件,可能使用cp -n来避免破坏已存在的同名文件。