【发布时间】:2024-01-16 02:33:01
【问题描述】:
尝试使用 sed 修改 xml 中的属性值,但没有按预期工作。例如,我想更新 doc 元素中 data 属性的值。
<doc_details>
<map>
<doc name="doc_name" data="doc_value" />
<map>
</doc_details>
下面的 sed 命令没有替换预期值。我真的不知道出了什么问题,因为我是 bash 脚本的新手
sed -i "s/^<doc name=\"doc_name\".*/<doc name=\"doc_name\" value=\"new_value\"><\/doc>/g" inputFile
请注意,我不想使用 xmlstarlet,因为它可能没有安装在服务器中。
【问题讨论】:
-
sed是这个工作的错误工具。请改用xmlstarlet(example)。 -
您说“更新”,但字符串中没有
value属性。您的意思是“添加或更新(如果存在)”? -
Don't Parse XML/HTML With Regex. 我建议使用 XML/HTML 解析器 (xmlstarlet, xmllint ...)。
-
是的,sed 不是推荐的方式。但这是一个小用例,无法在服务器上安装另一个包(xmlstarlet)。
-
您的搜索中有
^,因此sed期望它是行首,而实际上不是。