【问题标题】:Extract XML properties in a bash script based on other property基于其他属性在 bash 脚本中提取 XML 属性
【发布时间】:2021-04-01 11:05:14
【问题描述】:

我已经很久没有写过 bash 了,我正在努力想出解决这个问题的最佳方法。我认为 sed 或 awk 会被使用,但我不确定如何使用。

我有这个 xml 文件:

<Projects>
  <Project Guid="46824750-4e2d-46bd-bb6d-7c229cde63d5" Name="Example 1" Type="1" LastModified="2020-09-28T20:44:35.36Z" Version="36.0" />
  <Project Guid="d1137da2-041c-1f3e-a92b-48b2db9663c8" Name="Example 2" Type="5" LastModified="2020-03-24T21:19:48.517Z" Version="5.0" />
  <Project Guid="46824750-4c2d-49c5-8a6c-2c229cff63d5" Name="Example 3" Type="2" LastModified="2020-01-03T18:14:05.047Z" Version="3.2" />
</Projects>

在 bash 脚本中,我需要找到包含 Type="1" 的行,并从同一行中提取该 Guid。请注意,每个 xml 文件中只有一个包含 Type="1"。 sed 可以用来做这个吗?还是我必须走一个 xml 解析路线?

我不能真正安装额外的依赖项或库,因为这是在 Jenkins 代理上运行的,并且获得批准的依赖项的过程是漫长而严格的。理想情况下,这将通过内置的 Bash/UNIX 功能来完成。

关于最佳方法的任何想法?

【问题讨论】:

  • 如果这段代码要投入生产,我强烈建议使用xsltproc

标签: xml bash sed


【解决方案1】:

虽然不是最适合这项工作的工具,但可以使用 sed 。请尝试

sed -n '/Type="1"/s/.*Guid="\([^"]*\).*/\1/p' file.xml

使用 GNU sed 4.8 测试

【讨论】:

  • 什么会更好?我只需要能够可靠地执行这个非常具体的用例的东西,仅此而已
  • 在处理 XML 时,通常建议使用像 xmlstarlet 这样的指定 XML 工具,但在这种情况下,sed 解决方案就足够了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-05
  • 2017-05-03
  • 1970-01-01
相关资源
最近更新 更多