xml - 如何使用 sed 编辑 XML 数据文件的特定标签?
问题描述
我的 XML 代码如下
<root>
<list>
<pair name="id" Value="randomvalue" />
</list>
<list>
<pair name="place" Value="US" />
</list>
</root>
我需要将对标签(其名称属性为“id”)的值(可以是我们不知道的任何值)更改为“其他值”。
我试过使用:
sed -i 's|<pair name="id" Value="[a-zA-Z0-9_]+" />$|<pair name="id" Value="othervalue" />|g' file.xml
但它不起作用
解决方案
sed
,就像涉及 XML 的情况一样,在这里使用是错误的。使用本机理解格式的工具,例如xmlstarlet。它的多种模式之一允许您为匹配 XPath 表达式的属性或元素分配新值(与尝试使用正则表达式相比,这是匹配 XML 文档的一部分的更好和更精确的方法):
$ xmlstarlet ed -u '/root/list/pair[@name="id"]/@Value' -v othervalue file.xml
<?xml version="1.0"?>
<root>
<list>
<pair name="id" Value="othervalue"/>
</list>
<list>
<pair name="place" Value="US"/>
</list>
</root>
在xmlstarlet ed
中,-u xpath
表示“更新与给定 XPath 表达式匹配的位”并-v blah
表示“使用此值”。
添加--inplace
选项以在您验证 XML 文件执行正确后就地修改它:
xmlstarlet ed --inplace -u '/root/list/pair[@name="id"]/@Value' -v othervalue file.xml
推荐阅读
- react-native - 标题滚动时React Native无法折叠标题
- rust - 如何使用命名参数解析 &str?
- java - Spring Boot 使用 ConfigurationProperties 从 .properties 和 .yaml 注入 Map 值
- python - 输入一系列音符并让它们演奏
- python-3.x - 如何以纵向模式绘制每张图像
- html - html 字体/文本颜色在打印页面预览和打印输出时不会改变
- gcc - 如何通过 gcc 从 x86 内联汇编中获取 EIP
- php - 从 Yii2 应用程序验证后如何允许自动登录到 Yii1 应用程序
- javascript - 如何在一行中默认导出命名导入?
- javascript - 如何删除括号和括号内的内容?