xml - 基于其他属性在 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 功能来完成。
关于最佳方法的任何想法?
解决方案
虽然不是最适合这项工作的工具,但可以使用 sed。请试试
sed -n '/Type="1"/s/.*Guid="\([^"]*\).*/\1/p' file.xml
使用 GNU sed 4.8 测试
推荐阅读
- php - Mysql 中的数据库不显示 html 和 php 中单选按钮的结果
- sql-server - 按列顺序(而不是按列名)将来自多个 XML 的表解析为 1 个通用 SQL 表有多简单?
- odbc - RStudio 中连接窗格上的级联问题
- angular - 我正在研究 angular5,想验证我的子组件的表单。我有条件地在 DOM 中添加输入,但 @viewChild 没有更新表单
- sql - 为日期范围创建随机数
- swift - WKWebView 密码自动填充
- html - 悬停时更改 SVG 填充和文本突出显示颜色
- javascript - 创建的按钮没有 onclick
- html - 在我的信息右侧获取图像
- c# - 设置 DataGridView 的 DataSource 时索引超出范围异常