首页 > 解决方案 > 基于其他属性在 bash 脚本中提取 XML 属性

问题描述

我已经很久没有写过 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 功能来完成。

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

标签: xmlbashsed

解决方案


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

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

使用 GNU sed 4.8 测试


推荐阅读